なぜ`kill -l`はシグナル番号32と33をリストしないのですか?

なぜ`kill -l`はシグナル番号32と33をリストしないのですか?

kill -lLinuxで実行すると、次のようになります。

 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で終わることもあります。

答え1

だから特許のない技術。だからこそGNU Cライブラリほとんどすべての最新のLinuxディストリビューションは、最初の2つのリアルタイム信号を使用しなくなりました。 NPTLは実装ですPOSIXスレッド。 NPTLは内部的に最初の2つのリアルタイム信号を使用します。

この部分シグナルマニュアルページとても面白い:

Linuxカーネルは、32番から64番まで番号付けされた33種類のリアルタイム信号をサポートしています。ただし、glibc POSIXスレッドの実装では、内部的に2つ(NPTLの場合)または3つ(LinuxThreadsの場合)のリアルタイム信号を使用します(参照:並列スレッド(7))、値を調整します。SIGRTMIN適切に(34または35まで)。利用可能なリアルタイム信号の範囲はglibcスレッドの実装に応じて変更されます(この変更は使用可能なカーネルとglibcによって実行時に発生する可能性があります)、実際にはリアルタイム信号の範囲はUNIXシステムによって異なります。ライブ信号を参照するためにハードコードされた数字を使用しないでください。ただし、リアルタイム信号は常に記号を使用して参照する必要があります。SIGRTMIN+n適切な(ランタイム)チェックが含まれています。 SIGRTMIN+n以下信号最大

また、glibcのソースコードも確認しました。22号線__SIGRTMIN+2 を追加すると、最初の 2 つのライブ信号がライブ信号範囲から除外されます。

答え2

信号は次のようになるからです。

SIGWAITING 32 Ignore All LWPs blocked 
    SIGLWP 33 Ignore Virtual Interprocessor Interrupt for Threads Library 

Linuxではどちらもサポートされていません。 (LWP代表軽い職人技)

源泉:IBM DeveloperWorks SolarisからLinuxへの移行ガイド

関連情報