【发布时间】:2016-03-23 17:45:21
【问题描述】:
如果我在终端 ctrl-c 一个程序,Linux 会发送一个 SIGTERM 给进程组的所有成员。每个进程接收信号的顺序是否明确?
例如:如果我有一个类似这样的进程树(
[PID 2] <-- [PID 3] <-- [PID 4]
\_ [PID 5]
|_[PID 6]
pids 4,5,6 会先收到信号,向 pid 3 发送 SIGCHLD 吗?然后是 pid 3 和 pid 2?
【问题讨论】:
-
我可能错了,但我相信父母收到信号然后将其发送给孩子,以便他们关闭。或者父进程负责关闭所有子进程。
-
信号肯定会发送给进程组的所有成员,默认情况下会包括任何 fork() 的子进程。父母需要在孩子身上等待()以避免创建僵尸,但我找不到任何关于孩子是否在父母之前或之后发出信号的文档。
-
我突然想到,对于我的应用程序,这可能并不重要,因为我的孩子不受我控制,他们可以执行 setpgrp 或更改会话,所以我必须重新- 无论如何发出信号以确保安全。不过,知道答案会很有趣。
-
把问题发到linuxquestions.org 也没什么坏处。
-
我认为发送信号的顺序并不重要,因为它们只会坐在进程的待处理队列中,直到进程被调度。
标签: linux