Posix

當會話負責人退出時,unix 會話會發生什麼?

  • November 28, 2017

我正在嘗試為我的寵物作業系統正確模擬 POSIX 信號處理和作業控制,但我不清楚會話負責人退出後會話應該發生什麼。

我找不到與會話及其程序發生的情況相關的文件,例如,如果一個孩子在多個後台程序和不同的前台程序正在執行時殺死了會話負責人。

我的測試表明會話中的所有程序都被殺死了,但是如何?

他們收到特定的信號嗎?

POSIX 標準中是否指定了這種情況?如果是這樣,你能提供一些參考嗎?

您不是唯一一個對 POSIX 會話感到困惑的人。Lennart Poettering(systemd成名的他)也很困惑

據任何人所知,當會話負責人死亡時,會init繼承孤立的會話並

  • 前台程序組(如果有)中的所有會話成員程序都會收到 SIGHUP。
  • 不在前台組中的會話成員程序不會收到任何信號。

也可以看看:

如果終端因調製解調器掛斷而消失,並且線路不是本地線路,則向會話領導者發送 SIGHUP。$$ … $$當會話負責人死亡時,會向前台程序組中的所有程序發送 SIGHUP。$$ … $$因此,如果終端離開並且會話領導者是一個作業控制外殼,那麼它可以為它的後代處理事情,例如通過再次向他們發送一個 SIGHUP。另一方面,如果會話領導者是一個沒有擷取 SIGHUP 的無辜程序,它將死亡,並且所有前台程序都會獲得 SIGHUP。

Andries Brower,Linux 核心,第 10.3 節“會話”。

引用自:https://unix.stackexchange.com/questions/407448