在Linux中发送到进程组的信号的顺序是什么?

时间:2016-03-23 17:45:22

标签: linux

如果我在终端上控制程序,Linux会向进程组的所有成员发送SIGTERM。每个过程的顺序是否接收到明确定义的信号?

例如:如果我有一个像这样的进程树(< - 表示[parent]< - [child])

[PID 2] <-- [PID 3] <-- [PID 4]
                     \_ [PID 5]
                      |_[PID 6]

pids 4,5,6会先收到信号,发送SIGCHLD到pid 3吗?然后pid 3和pid 2?

1 个答案:

答案 0 :(得分:1)

我一直在浏览Linux内核源码,我想我有答案。当通过kill发送信号时,Linux会迭代pid结构中保存的链表,其中包含使用该PID的所有任务。我相信这意味着它会以 reverse 顺序对组中的进程进行迭代它们是fork(),因为PID已经通过hlist_add_head_rcu添加到链接列表中,后者将其插入在头上。我不认为这种行为应该依赖,因为它们可以通过多种方式改变它。