【发布时间】:2018-09-20 04:55:40
【问题描述】:
假设每当主程序收到 SIGINT 信号时,最年轻的(即最后一个分叉的)进程被分叉。换句话说:
p1 SIGINT
p1->p2 SIGINT
p1->p2->p3
等等
我的问题是我不知道如何告诉孙辈-...-孩子分叉。
【问题讨论】:
-
不清楚。阅读fork(2)、signal(7) 和signal-safety(7)
-
@BasileStarynkevitch 主进程
p1接收SIGNT然后它分叉并创建p2进程。接下来,p1再次接收SIGNT,p2分叉并创建p3。以此类推 -
这里的逻辑很简单:接收到
SIGINT,发送SIGINT给子进程。如果还没有子进程,调用fork()。 -
您可以使用进程组。父进程创建自己的进程组。当它收到第一个 SIGINT 时,它会创建一个孩子。此后,当它接收到 SIGINT 时,它会将信号发送到进程组。进程组中的进程处理中断;如果他们还没有分叉,他们现在就这样做,然后可以忽略中断(因为他们不会第二次分叉)。这可能有一些陷阱——但我还不确定它们是什么。并且简单地将中断沿流程链传递可能更简单。我认为孩子们可以退出进程组。
-
不是所有的孩子都收到 SIGINT 信号吗?