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