gpt4 book ai didi

c - 流程链从最后开始彼此结束

转载 作者:行者123 更新时间:2023-11-30 17:47:06 24 4
gpt4 key购买 nike

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

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

我很容易就完成了这些,但问题是:当P(n)被唤醒(被P(n-1))唤醒时,需要杀死所有进程(除了P0),然后P0 printf("End of prog")

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

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

最佳答案

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com