私が知っている限り、SIGKILLはキャッチできません。これは、オペレーティングシステムがプロセスを破壊する前にそのプロセスが子プロセスを終了する時間がないことを意味します。これはシェルスクリプトで実証できます。
#! /bin/bash
trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.
mplayer video.avi
SIGKILLで終了すると、mplayerは引き続き実行されます。
$ kill -9 $pid
ただし、ターミナルエミュレータ(xterm、ターミナルなど)を使用すると、その子プロセスも一緒に終了します。どうやってこれができますか?
$ mplayer
そしてそれを殺す:
$ kill -9 $terminal_pid
mplayerも沈没しました。ターミナルエミュレータは何とかSIGKILLをキャプチャしていますか?それとも別の力が働いていますか?
ベストアンサー1
これによって開始されたプロセスは、xterm
端末を制御するセッションリーダーになります。
端末が消えると、プロセスは自動的にSIGHUP信号(次にSIGCONT)を受信します。これは、CTRL-C を押したときにプロセスが SIGINT を受信するのと同様の方法でカーネルによって送信されます。
また、シェルは終了時に一部の子にSIGHUPを送信できます(disown
これを無効にするには、一部のシェルを参照)。