Linux-Kernel
為什麼 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*
這個問題的答案可以在
signal(7)
手冊頁的Real-time Signals
部分中找到實時信號
Linux 支持最初在 POSIX.1b 實時擴展中定義的實時信號(現在包含在 POSIX.1-2001 中)。支持的實時信號範圍由宏
SIGRTMIN
和SIGRTMAX
. POSIX.1-2001 要求實現至少支持POSIX_RTSIG_MAX(8)
實時信號。Linux 核心支持 32 種不同的實時信號,編號
33
為64
. 但是,glibc
POSIX 執行緒實現在內部使用兩個(對於 NPTL)或三個(對於 LinuxThreads)實時信號(請參閱 參考資料pthreads(7)
),並SIGRTMIN
適當地調整 (to34
或35
)的值。