在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 信号。