c++ - 如何让两个子进程互相等待

标签 c++ c process operating-system fork

我正在研究操作系统中的进程。我想出了一个问题,我必须创建两个子进程来使用 fork and wait 来完成类似的任务。在 parent fork 第一个 child 之后,那个 child 会等到 parent fork 另一个 child 并且第二个 child 完成它的工作。

例如,如果我想让第一个 child 显示 10 个第一个偶数,第二个 child 显示 10 个第一个奇数,则输出应该是这样的:

二胎 1 3 5 7 9 11 13 15 17 19 第二个 child 死了 第一个 child 2 4 6 8 10 12 14 16 18 20 第一个 child 死了

结束!

我一直在尝试各种方法,但我无法让第一个 child 等到第二个 child 完成工作。 有人知道怎么做吗? 谢谢

最佳答案

这些不是最优的,但可以解决问题:

首先,选择使用共享对象:
- 您可以使用 mmap 创建共享内存区域,(参见 man mmap)
- 您可以使用 shmget 和 shmat 函数系列
- 因此你们将获得彼此的 PID 并能够使用 wait (man 2 wait)

第二个选项:
- parent 知道两个 child 的 PID。
- parent 将一个接一个地向两个 child 发送信号。 (见 man 2 kill(请不要发送 KILL 信号))
- 每个 child 都有一个自定义的 parent ,并用这个信号做一些事情。

关于c++ - 如何让两个子进程互相等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797151/

相关文章:

java - 如何在其他 Java 程序中使用 ProcessBuilder 运行 Java 程序。 (使用 -cp 和 -Xbootclasspath 命令)

c++ - 如何将 Windows 进程重置为以前的状态?

c++ - OpenGL rubiks cube - 用鼠标进行面部旋转

c++ - 如何通过变量值获取最小值组?

C++ 重载被重写的方法

c++ - 2D OpenGL 场景因大量重叠形状而变慢

c - 使用 Typedef 将元素存储在二维数组中

函数调用后栈的内容

c++ - 使用 C++ 访问网络摄像头的 FFMPEG

C# 流程 - 数据流、XML 和数据网格