![SIGHUP 是否发送到这个孤立进程,为什么它不终止?](https://linux22.com/image/142664/SIGHUP%20%E6%98%AF%E5%90%A6%E5%8F%91%E9%80%81%E5%88%B0%E8%BF%99%E4%B8%AA%E5%AD%A4%E7%AB%8B%E8%BF%9B%E7%A8%8B%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E4%B8%8D%E7%BB%88%E6%AD%A2%EF%BC%9F.png)
在Linux 编程接口:
当进程组成为孤立进程时,会生成 SIGHUP。
在交互式 bash 过程中,
$ ( sleep 123 &)
首先会分叉一个子shell,然后该子shell会分叉来执行sleep 123 &
。子 shell 立即退出,无需等待sleep 123
完成,因为&
.当时,
该进程是
sleep
孤立进程吗? (我想是的,图34.3)SIGHUP 是否
sleep
因为进程成为孤儿进程而被发送? (我猜是的,根据引用)为什么进程没有
sleep
终止,因为 SIGHUP 已发送给它? (我不知道)
谢谢。
在创建守护进程时,我也有类似的问题,首先分叉一个子进程,然后子进程分叉孙子并立即退出。孙子成为孤儿,并且没有向它发送 SIGHUP 使其终止吗?
答案1
从The Open Group 基本规范第 7 期,2018 年版,系统接口, 在下面_exit
:
如果该进程是控制进程,则应向属于调用进程的控制终端的前台进程组中的每个进程发送SIGHUP信号。
如果该进程是控制进程,则与该会话关联的控制终端应与该会话解除关联,以允许新的控制进程获取该会话。
如果进程的退出导致进程组成为孤立进程,如果新孤立进程组的任何成员被停止,则应向新孤立进程组中的每个进程发送一个 SIGHUP 信号,后跟一个 SIGCONT 信号。