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