我的流程链看起来像这样
P0(主进程)创建P1,然后P1创建P2,依此类推...

创建Pn时(n是一个随机数〜10),除P0之外的所有进程都需要通过SIGSTOP信号停止。当所有它们都停止时,P0必须先进行printf(“所有进程已停止”),然后使用SIGCONT唤醒所有它们。

我已经轻松完成了很多工作,但这是问题所在:
当P(n)被唤醒时(由P(n-1)唤醒),所有进程(P0除外)都需要终止,然后P0 printf(“ prog End”)

我不能使用wait,waitpid。
我试图使Pn向P0发送信号,然后P0向所有进程发送SIGTERM信号,但是Pn总是在P0之后结束。
我也试图使Pn杀死P(n-1)和P(n-1)杀死P(n-2),这是同样的问题。

无论如何,有一个想法可以确保在P9打印消息时杀死所有进程?
我正在使用SIGCHLD作为P0,以了解何时停止了P1(因此停止了P2,P3,...)。我也应该可以使用它,但是我怎么知道我是否在P0中收到此信号,因为P1被杀死,恢复或停止了?

最佳答案

我找到了解决方案,一旦所有进程都停止了,我将使用SA_NOCLDSTOP | |更新操作掩码。 SA_NOCLDWAIT确保一旦我的SIGCHLD的处理程序被调用,这将是因为子进程已死(并且没有僵尸问题)。

关于c - 流程链从最后开始彼此结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19050227/

10-11 22:05