不久前,我想知道这个问题:为什么在Linux上关闭终端时所有进程都被杀死,而不是传递给“init”进程(使用pid 1)? 因为,父节点终止后,所有子进程都被“init”进程采用。 请帮助我理解我的推理中的差异和错误。
还有:
如果可能,那么我们可以使用系统调用来阻止这种情况发生吗?我认为,为此,程序需要使用setsid()
,但实际上它不正确。
答案 0 :(得分:2)
正如cnicutar所解释的,这是由于SIGHUP
发送到与控制终端关联的进程组中的所有进程。您可以为此信号安装处理程序,也可以完全忽略它。对于任意程序,您可以使用为此目的设计的nohup
实用程序启动它们。
您也可以将流程放在没有控制终端的新流程组中。
答案 1 :(得分:1)
为什么在linux上的关闭终端上,他的所有进程都将终止,但是 没有传递给“init”进程(使用pid 1)
进程正在丢失其控制终端,因此内核会向它们发送SIGHUP
。 SIGHUP
的默认操作是终止该过程。
答案 2 :(得分:0)