web-dev-qa-db-ja.com

SIGRTMIN(最初のリアルタイム信号)の整数値が32ではなく34なのはなぜですか?

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の整数値が32ではなく34であることがわかります。

... 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*
3
Paulo Tomé

この質問への回答は、signal(7)のマニュアルページの_Real-time Signals_セクションにあります。

リアルタイム信号

Linuxは、POSIX.1bリアルタイム拡張で最初に定義された(現在はPOSIX.1-2001に含まれている)リアルタイム信号をサポートしています。サポートされるリアルタイム信号の範囲は、マクロSIGRTMINおよびSIGRTMAXによって定義されます。 POSIX.1-2001では、実装が少なくともPOSIX_RTSIG_MAX(8)リアルタイム信号をサポートする必要があります。

Linuxカーネルは、_33_から_64_まで番号が付けられた32種類のリアルタイム信号をサポートしています。ただし、glibc POSIXスレッドの実装では、内部で2つ(NPTLの場合)または3つ(LinuxThreadsの場合)のリアルタイム信号(pthreads(7)を参照)を使用し、SIGRTMINの値を適切に(_34_または_35_)。

3
Paulo Tomé