存在するLinuxプログラミングインターフェース:
SIGHUP は、プロセスグループが孤立プロセスになると生成されます。
インタラクティブbash中
$ ( sleep 123 &)
まず、サブシェルが分岐され、次にそのサブシェルが実行のために分岐されますsleep 123 &
。サブシェルはsleep 123
完了を待たずにすぐに終了します&
。
プロセスは
sleep
孤児プロセスですか? (そう思います、図34.3)sleep
プロセスが切り離されたため、SIGHUPは送信されていますか? (引用によるとそうだと思います)sleep
SIGHUPが送信されてもプロセスが終了しないのはなぜですか? (わかりません)
ありがとうございます。
デーモンプロセスを作成するときに同様の問題が発生しました。まず、子プロセスをフォークしてから、子プロセスが孫をフォークしてすぐに終了しました。孫がSIGHUPを送らず孤児になって終了しますか?
答え1
~からOpen Group 基本仕様 2018年7号版、システムインターフェース、下に_exit
:
プロセスが制御プロセスの場合、SIGHUP信号は呼び出しプロセスの制御端末に属する前景プロセスグループの各プロセスに送信されます。
プロセスが制御プロセスの場合、セッションに関連付けられている制御端末はセッションから切断し、新しい制御プロセスがセッションを獲得できるようにする必要があります。
プロセスの終了によってプロセスグループが孤児プロセスになる場合、新しく孤立したプロセスグループのメンバーが停止した場合、SIGHUP信号は、新しく分離されたプロセスグループの各プロセスに送信され、その後にSIGCONT信号が送信される必要があります。