我正在嘗試正確模擬 POSIX 訊號處理和作業控制我的寵物作業系統,但我不清楚會話領導者退出後會話會發生什麼。
我找不到與會話及其進程發生的情況相關的文檔,例如,如果一個孩子在多個後台進程和不同的前台進程正在運行時殺死了會話領導者。
我的測試顯示會話中的所有進程都被殺死了,但是如何殺死呢?
他們收到特定訊號嗎?
POSIX 標準中是否指定了這種情況?如果是的話,您能提供一些參考嗎?
答案1
您並不是唯一一個對 POSIX 會話感到困惑的人;您也不是唯一一個對 POSIX 會話感到困惑的人。柏特林(Lennart Poettering)(名人systemd
)也很疑惑。
據任何人所知,當會話領導者死亡時,init
會繼承孤立會話並
前台進程組中的所有會話成員進程(如果有)都會收到 SIGHUP。
不在前台組中的會話成員進程不會收到任何訊號。
也可以看看:
- 註.shichao.io/apue/ch9
- 第10章流程“ 在 Linux 核心安德里斯‧布勞威爾 (Andries Brouwer) (2003)。
如果終端機因數據機掛斷而消失,且線路不是本地的,則會向會話領導者發送 SIGHUP。 [...] 當會話領導者死亡時,會傳送 SIGHUP給前台進程組中的所有程序。 [...] 因此,如果終端機消失並且會話領導者是作業控制 shell,那麼它可以為其後代處理事務,例如透過再次向它們發送 SIGHUP。另一方面,如果會話領導者是一個沒有捕獲 SIGHUP 的無辜進程,它將死亡,並且所有前台進程都會收到 SIGHUP。
安德里斯·布勞爾,Linux 核心,第 10.3 節“會議」。