web-dev-qa-db-ja.com

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

実行中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で終了することもできますか?

18
user2555595

[〜#〜] 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つのリアルタイム信号はリアルタイム信号の範囲から除外されます。

20
chaos

信号は次のとおりです。

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

Linuxではどちらもサポートされていません。 (LWPは LightWeight Process を表します)

ソース: IBM DeveloperWorks Solaris to Linux Porting Guide

10
garethTheRed