【发布时间】:2017-12-25 07:42:08
【问题描述】:
这是一个关于在another question 中回答Praveen Gollakota's 的问题(这是我应该绕过评论权限的方式吗?)。
他对为什么要分叉两次的问题的回答,本质上是为了确保分叉的进程不是会话领导者,因此无法获得 tty。他给出了这个fork过程的例子,并表明第二个孩子不是会话负责人(第二个fork之后的SID不是第二个孩子的PID)。
1. `Parent` = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1` = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2` = PID: 28086, PGID: 28085, SID: 28085
但是,您也可以在此处看到,在第一次分叉之后和“解耦”步骤之前(我假设这是对 setsid() 的调用),孩子不是会话负责人。因此我的问题是为什么打电话给setsid()?为什么不分叉一次就退出?
我的猜测是,这与会话负责人是控制终端(或其他祖父母)有关。所以接下来的问题是,如果组长退出但会话组长仍然活着的进程会发生什么?
【问题讨论】: