我有一个看起来像这样的过程链 P0(主进程)创建P1,然后P1创建P2等......
当创建Pn(n是随机数~10)时,除了P0之外的所有过程都需要由SIGSTOP信号停止。当所有这些都停止时,P0必须printf(“所有进程停止”),然后用SIGCONT唤醒所有这些。
这很多我做得很轻松,但问题在于: 当P(n)被唤醒时(通过P(n-1)),所有过程(P0除外)都需要被杀死,然后是P0 printf(“结束前进”)
我不能使用wait,waitpid。 我试图让Pn向P0发送信号,然后P0向所有进程发送SIGTERM信号,但Pn总是在P0之后结束,这不好。 我也试图让Pn杀死P(n-1)和P(n-1)杀死P(n-2),同样的问题。
无论如何都有一个想法,以确保P9打印消息时所有进程都被杀死了吗? 我正在使用SIGCHLD for P0来知道P1何时停止(因此P2,P3,......)。我也应该可以使用它,但是我怎么知道我是否在P0中得到这个信号因为P1被杀死或恢复或停止了?
答案 0 :(得分:0)
我找到了解决方案,一旦所有进程都停止了,我就用SA_NOCLDSTOP更新动作掩码。 SA_NOCLDWAIT确保一旦我的SIGCHLD处理程序被调用,那将是因为子进程已经死亡(并且没有僵尸问题)。