为什么SIGRTMIN(第一个实时信号)的整数值为34而不是32?

为什么SIGRTMIN(第一个实时信号)的整数值为34而不是32?

kill -l检查命令的输出

$ kill -l
1) SIGHUP    2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
6) SIGABRT   7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

可以注意到 SIGRTMIN 的整数值为 34,而不是 32。

... 31) SIGSYS 34) SIGRTMIN ...

为什么?

$ uname -r
4.19.0-8-amd64

$ ls -l /lib/x86_64-linux-gnu/libc-2.28.so 
-rwxr-xr-x 1 root root 1.8M May  1  2019 /lib/x86_64-linux-gnu/libc-2.28.so*

答案1

这个问题的答案可以在手册signal(7)页中找到Real-time Signals

实时信号

Linux 支持最初在 POSIX.1b 实时扩展中定义的实时信号(现在包含在 POSIX.1-2001 中)。支持的实时信号的范围由宏SIGRTMIN和定义SIGRTMAX。 POSIX.1-2001 要求实现至少支持POSIX_RTSIG_MAX(8)实时信号。

Linux 内核支持 32 种不同的实时信号,编号3364。然而,glibcPOSIX 线程实现在内部使用两个(对于 NPTL)或三个(对于 LinuxThreads)实时信号(请参阅pthreads(7)),并适当调整 的值SIGRTMIN(为3435)。

相关内容