web-dev-qa-db-ja.com

なぜSIGTERMは睡眠を殺すことができるのですか?

私は睡眠がどんなSIGNALも処理できないことを読みました。したがって、SIGTERMを送信すると、無視する必要があるように思われます。

sleep 10000 &
26322
kill -s SIGTERM 26322
[1]+  Exited             sleep 1000 

なぜ睡眠が殺されるのですか?結局のところ、シグナルハンドラーはインストールされません。

3
Spring fancy

シグナルハンドラーをインストールしないプログラム、またはシグナルを明示的に無視するプログラムは、他に何も言及されていない場合、デフォルトのアクションを実行します。

TERM信号を受信したときのデフォルトのアクションは、プロセスを終了することです。


特にsleepユーティリティの場合、POSIX仕様で明示的に言及されている唯一のシグナルはALRMシグナルであり、これによりプロセスがゼロ終了ステータス(「成功」)で終了します。 )。 sleepは、ALRMを無視するか、デフォルトのアクションを実行するかを選択することもできます。他のすべてのシグナルについては、デフォルトのアクションが実行されます。

sleepユーティリティのPOSIXドキュメント を参照してください。

3
Kusalananda