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

标签 c process synchronization signals posix

我有一个看起来像这样的流程链 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/

相关文章:

javascript - Node.js 进程未检测到端口已被使用

c++ - 检测进程是否仍在运行

java - 在从 Apache Tomcat 取消部署/停止应用程序之前停止进程/线程

c# - cargo 崇拜编程 : locking on System. 对象

支持多个编译器的 C++ 代码

c - 在C中的函数中定义数组

c++ - 为什么 NULL 指针在 C 和 C++ 中的定义不同?

c - 通过 libpcap 写一个类似 squid 的程序

ios - iCloud + 核心数据 : First import and user's feeling of loss of data

c - 如何解决C语言中的 "Segmentation fault"错误