为什么我们在守护进程时使用 setsid()?

Kal*_*alu 23 daemon

为了创建一个服务(守护进程),我们 fork 父进程并使其退出,同时通过调用setsid(). 此外,我们为什么要使用 setsid()?我们的孤儿进程由init(尽管不是所有情况下)进程负责。

为什么要使用stsid()?setsid()和处理SIGHUP信号之间是否有任何关系。

ZN1*_*N13 18

我们使用 setsid() 是因为如果我们只杀死父进程,子进程也会被杀死,setsid()

如果调用进程不是进程组领导,则创建一个新会话。调用进程是新会话的leader,新进程组的进程组leader,没有控制终端。

父进程是第一个进程组领导者,杀死它 - 或杀死会话/终端 - 杀死该组,这就是我们切换领导者(并在我们使用它时创建一个新会话)的原因。

  • 当控制终端关闭时,父级会收到 SIGHUP。孩子不会得到 SIGHUP,因为它处于新会话中。 (9认同)