SIGKILLを受け取った後、ターミナルエミュレータはどのようにサブプロセスを終了しますか?

SIGKILLを受け取った後、ターミナルエミュレータはどのようにサブプロセスを終了しますか?

私が知っている限り、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これを無効にするには、一部のシェルを参照)。

おすすめ記事