SIGHUPは孤児プロセスに転送されますが、なぜ終了しないのですか?

SIGHUPは孤児プロセスに転送されますが、なぜ終了しないのですか?

存在するLinuxプログラミングインターフェース:

SIGHUP は、プロセスグループが孤立プロセスになると生成されます。

インタラクティブbash中

$ ( sleep 123 &)

まず、サブシェルが分岐され、次にそのサブシェルが実行のために分岐されますsleep 123 &。サブシェルはsleep 123完了を待たずにすぐに終了します&

  • プロセスはsleep孤児プロセスですか? (そう思います、図34.3)

  • sleepプロセスが切り離されたため、SIGHUPは送信されていますか? (引用によるとそうだと思います)

  • sleepSIGHUPが送信されても​​プロセスが終了しないのはなぜですか? (わかりません)

ありがとうございます。


デーモンプロセスを作成するときに同様の問題が発生しました。まず、子プロセスをフォークしてから、子プロセスが孫をフォークしてすぐに終了しました。孫がSIGHUPを送らず孤児になって終了しますか?

ベストアンサー1

~からOpen Group 基本仕様 2018年7号版システムインターフェース、下に_exit:

  • プロセスが制御プロセスの場合、SIGHUP信号は呼び出しプロセスの制御端末に属する前景プロセスグループの各プロセスに送信されます。

  • プロセスが制御プロセスの場合、セッションに関連付けられている制御端末はセッションから切断し、新しい制御プロセスがセッションを獲得できるようにする必要があります。

  • プロセスの終了によってプロセスグループが孤児プロセスになる場合、新しく孤立したプロセスグループのメンバーが停止した場合、SIGHUP信号は、新しく分離されたプロセスグループの各プロセスに送信され、その後にSIGCONT信号が送信される必要があります。

おすすめ記事