SIGHUP 是否发送到这个孤立进程,为什么它不终止?

SIGHUP 是否发送到这个孤立进程,为什么它不终止?

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

相关内容