セッションリーダーが終了すると、Unixセッションはどうなりますか?

セッションリーダーが終了すると、Unixセッションはどうなりますか?

POSIX信号処理とジョブ制御を正しくエミュレートしようとしています。私のペットオペレーティングシステムしかし、セッションリーダーが終了した後にセッションに何が起こるのかは不明です。

たとえば、複数のバックグラウンドプロセスやさまざまなフォアグラウンドプロセスが実行されている間に子供がセッションリーダーを殺すなど、セッションやそのプロセスで発生する状況に関連する文書を見つけることはできません。

テストの結果、セッションのすべてのプロセスが終了したことがわかりました。ところでどうなりますか?
特定の信号を受信して​​いますか?
この場合はPOSIX規格に指定されていますか?それでは、いくつかの参考資料を提供できますか?

答え1

POSIXセッションで混乱している人はあなただけではありません。レナートポータリング(芸能人systemdまた、非常に混乱しています。

皆さんご存じのように、セッションリーダーが死ぬとinit孤児セッションが継承され、

  • フォアグラウンドプロセスグループ(存在する場合)のすべてのセッションメンバープロセスはSIGHUPを受け取ります。

  • フォアグラウンドグループに属していないセッションメンバープロセスはシグナルを受けません。

また見なさい:

モデムが切断されて端末が消え、回線がローカルでない場合、SIGHUP はセッションリーダーに送信されます。 [...] セッションリーダーが死亡すると、SIGHUP はフォアグラウンドプロセスグループ内のすべてのプロセスに送信されます。 [...] したがって、ターミナルが消え、セッションリーダーがジョブ制御シェルの場合、たとえばSIGHUPを再送信してサブアイテムのトランザクションを処理できます。一方、セッションリーダーがSIGHUPをキャプチャできない無実のプロセスである場合、これは終了し、すべてのフォアグラウンドプロセスがSIGHUPを受け取ります。

アンドリス・ブラウアー,Linuxカーネル、セクション10.3 "会議」。

関連情報