当会话负责人退出时,unix 会话会发生什么?

Gia*_*sio 4 process-management posix

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

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

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

Ale*_*exP 8

您不是唯一一个对 POSIX 会话感到困惑的人;Lennart Poettering(他的systemd名人)也很困惑

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

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

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

也可以看看:

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

Andries Brower,Linux 内核,第 10.3 节“会话”。