c - 为什么终端 session 结束时所有进程都被杀死?

标签 c linux terminal system-calls

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

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

最佳答案

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

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

关于c - 为什么终端 session 结束时所有进程都被杀死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12419360/

相关文章:

c++ - 在大于 unsigned long long 的数字上中断循环

c++ - 重启RPC服务

linux - 发送多个 csv 附件,简单的 Bash 错误?

linux - Bash 脚本 - 查找目录,并在其中执行某些操作。或者找到一个文件,然后用它做点什么

python - 我可以制作一个脚本来打开终端并运行 .py 吗?

windows - 在 WebStorm 终端中使用 bash

c - 如何引用二维数组中的单个字符?

c - 数组从一开始就不为空

linux - 如何在centos中复制其名称部分已知的文件夹的内容

mysql - Xampp Linux : PDOException: SQLSTATE[HY000] [2002] Connection refused in lock_may_be_available() error