実行中kill -l
Linuxの場合:
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
32
および33
?リストにないのはなぜですか?途中で2をスキップするのではなく、1で開始して62で終了することもできますか?
[〜#〜] nptl [〜#〜] が原因です。 GNU Cライブラリ の一部であるため、ほとんどすべての最新のLinuxディストリビューションは、最初の2つのリアルタイム信号をもう使用しません。 NPTLは POSIXスレッド の実装です。 NPTLは最初の2つのリアルタイム信号を内部で使用します。
signal manpage のこの部分は非常に興味深いものです。
Linuxカーネルは、33から64までの番号が付けられた32の異なるリアルタイム信号の範囲をサポートします。ただし、glibc POSIXスレッドの実装では、内部で2つ(NPTLの場合)または3つ(LinuxThreadsの場合)のリアルタイム信号を使用します(pthreads(7)を参照) 、SIGRTMINの値を適切に(34または35に)調整します。利用可能なリアルタイム信号の範囲はglibcスレッド化の実装によって異なり(この変動は、利用可能なカーネルとglibcによって実行時に発生する可能性があります)、実際、リアルタイム信号の範囲はUNIXシステム間で異なるため、プログラムはハードコードされた数値を使用してリアルタイム信号を参照するのではなく、常にSIGRTMIN + nという表記を使用してリアルタイム信号を参照し、SIGRTMIN + nがSIGRTMAXを超えないことを確認する適切な(ランタイム)チェックを含める必要があります。
また、glibcのソースコードも確認しました。 行22 を参照してください。 __SIGRTMIN
が+2増加するため、最初の2つのリアルタイム信号はリアルタイム信号の範囲から除外されます。
信号は次のとおりです。
SIGWAITING 32 Ignore All LWPs blocked
SIGLWP 33 Ignore Virtual Interprocessor Interrupt for Threads Library
Linuxではどちらもサポートされていません。 (LWPは LightWeight Process を表します)