当会话领导者退出时,Unix 会话会发生什么?

当会话领导者退出时,Unix 会话会发生什么?

我正在尝试正确模拟 POSIX 信号处理和作业控制我的宠物操作系统,但我不清楚会话领导者退出后会话会发生什么。

我找不到与会话及其进程发生的情况相关的文档,例如,如果一个孩子在多个后台进程和不同的前台进程正在运行时杀死了会话领导者。

我的测试显示会话中的所有进程都被杀死了,但是如何杀死呢?
他们收到特定信号吗?
POSIX 标准中是否指定了这种情况?如果是的话,您能提供一些参考吗?

答案1

您并不是唯一一个对 POSIX 会话感到困惑的人;您也不是唯一一个对 POSIX 会话感到困惑的人。伦纳特·珀特林(Lennart Poettering)(名人systemd也很困惑

据任何人所知,当会话领导者死亡时,init会继承孤立会话并

  • 前台进程组中的所有会话成员进程(如果有)都会收到 SIGHUP。

  • 不在前台组中的会话成员进程不会收到任何信号。

也可以看看:

如果终端因调制解调器挂断而消失,并且线路不是本地的,则会向会话领导者发送 SIGHUP。 [...] 当会话领导者死亡时,会向前台进程组中的所有进程发送 SIGHUP。 [...] 因此,如果终端消失并且会话领导者是作业控制 shell,那么它可以为其后代处理事务,例如通过再次向它们发送 SIGHUP。另一方面,如果会话领导者是一个没有捕获 SIGHUP 的无辜进程,它将死亡,并且所有前台进程都会收到 SIGHUP。

安德里斯·布劳尔,Linux 内核,第 10.3 节“会议”。

相关内容