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