fork - 使用 fork 创建多个进程并等待
问题描述
我正在尝试编写一个程序,该程序将创建如下进程:
P1 -> P2 -> P3
P1-> P4 ->P5
P2、P3需要在P4、P5之前完成
到目前为止我的代码:
#include<stdio.h>
int main()
{
for(int i=0;i<2;i++) // loop will run 2 times
{
if(fork() == 0)
{
printf("[son] pid %d from [parent] pid %d\n",getpid(),getppid());
exit(0);
}
}
for(int i=0;i<2;i++) // loop will run 2 times
wait(NULL);
}
如果它们是从 P1 分叉的,我在 P2、P3 之后运行 P4 和 P5 时会遇到困难。请帮助
解决方案
如果您希望 P2 和 P3 在 P4 和 P5 开始之前完成,P1 应该在第一次分叉之后等待它们完成,而不是在完成 2 次分叉的整个循环之后。
您正在并行启动 P2 和 P4。
这是第一个问题,除了不确定如何创建 P3 和 P5 之外,因为子进程(P2 和 P4)会立即退出而不创建它们。您可能需要从 IF 内部调用一些分叉,不是吗?
推荐阅读
- macos - 从 /usr/lib 链接库可以吗?
- c# - 在 Azure Linux ASP 和 Azure SQL 数据库上运行的 .net 核心之间的连接池问题
- jmeter - HTTP Request on JMeter does not return a response from some sites
- mysql - SQL如何查找不在另一个结果中的特定值
- solrcloud - 如何在调试模式下启动solrcloud(只有一个节点)
- swift - 确保订阅(接收器)只发生一次
- node.js - req.session.user 在 authChecker 中间件中未定义
- swiftui - 如果我不想要 Picker 的初始选定值该怎么办?
- swift - SwiftUI:在不同视图中更改对象
- mysql - 存储倒数数据sql的规范方法