如果在 bash 中输入 kill -l
并探测信号数。
32 和 33 kill 信号发生了什么变化?
最佳答案
POSIX realtime signals选项定义一组来自 SIGRTMIN
的信号至 SIGRTMAX
它们具有各种有用的属性(例如,它们具有明确定义的传递优先级——首先是最低信号编号——并且同一信号的多个实例可以排队,并通过 sigqueue()
与参数相关联)。这些由内核使用信号编号 32 向上实现。
但是 POSIX 不需要 SIGRTMIN
和 SIGRTMAX
成为用户态代码的编译时常量,而在 GNU libc 中它们不是:如果您使用用户态 <signal.h>
放置源文件通过预处理器(例如 gcc -E
),你会看到 SIGRTMIN
实际上扩展为 (__libc_current_sigrtmin())
.
implementation of this inside glibc 至少保留内核支持的前两个值用于其内部目的。其中第一个(最高优先级的此类信号)用于支持线程取消处理;第二个用于与 setuid
的实现相关的事情。 . (参见 here 。我不确定在什么情况下利用分配更多信号供内部使用的能力。)
因此丢失的信号编号是由于 bash
造成的向您展示可用信号的应用程序 View (省略了 glibc 内部使用的信号),而不是内核 View 。
关于linux - 32 和 33 kill 信号发生了什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680624/