POSIX信号処理とジョブ制御を正しくエミュレートしようとしています。私のペットオペレーティングシステムしかし、セッションリーダーが終了した後にセッションに何が起こるのかは不明です。
たとえば、複数のバックグラウンドプロセスやさまざまなフォアグラウンドプロセスが実行されている間に子供がセッションリーダーを殺すなど、セッションやそのプロセスで発生する状況に関連する文書を見つけることはできません。
テストの結果、セッションのすべてのプロセスが終了したことがわかりました。ところでどうなりますか?
特定の信号を受信していますか?
この場合はPOSIX規格に指定されていますか?それでは、いくつかの参考資料を提供できますか?
答え1
POSIXセッションで混乱している人はあなただけではありません。レナートポータリング(芸能人systemd
)また、非常に混乱しています。。
皆さんご存じのように、セッションリーダーが死ぬとinit
孤児セッションが継承され、
フォアグラウンドプロセスグループ(存在する場合)のすべてのセッションメンバープロセスはSIGHUPを受け取ります。
フォアグラウンドグループに属していないセッションメンバープロセスはシグナルを受けません。
また見なさい:
- Notes.shichao.io/apue/ch9
- 第10章プロセス「存在する Linuxカーネルアンドリス・ブラウアー(2003)。
モデムが切断されて端末が消え、回線がローカルでない場合、SIGHUP はセッションリーダーに送信されます。 [...] セッションリーダーが死亡すると、SIGHUP はフォアグラウンドプロセスグループ内のすべてのプロセスに送信されます。 [...] したがって、ターミナルが消え、セッションリーダーがジョブ制御シェルの場合、たとえばSIGHUPを再送信してサブアイテムのトランザクションを処理できます。一方、セッションリーダーがSIGHUPをキャプチャできない無実のプロセスである場合、これは終了し、すべてのフォアグラウンドプロセスがSIGHUPを受け取ります。
アンドリス・ブラウアー,Linuxカーネル、セクション10.3 "会議」。