1

不久前,我想知道一个问题:为什么在 Linux 上关闭终端时所有进程都被杀死,而不是传递给“init”进程(pid 1)?因为,在父进程终止后,所有子进程都被“init”进程采用。请帮助我理解我推理中的差异和错误。

还有:如果可能的话,我们可以使用系统调用来阻止这种情况发生吗?我认为,为此程序需要使用setsid(),但实际上它是不正确的。

4

3 回答 3

2

正如 cnicutar 所解释的,这是由于SIGHUP发送到与控制终端关联的进程组中的所有进程。您可以为此信号安装处理程序,也可以完全忽略它。对于任意程序,您可以使用nohup为此目的设计的实用程序启动它们。

您还可以将进程放置在没有控制终端的新进程组中。

于 2012-09-14T07:09:06.793 回答
1

为什么在 linux 上的关闭终端上,他的所有进程都将终止,但没有传递给“init”进程(使用 pid 1)

这些进程正在失去它们的控制终端,因此内核向它们发送一个SIGHUP. 的默认操作SIGHUP是终止进程。

于 2012-09-14T06:44:33.930 回答
0

我认为这将帮助您理解 http://www.digipedia.pl/usenet/thread/18802/10189/

于 2012-09-14T06:47:56.147 回答