问题描述
我正在尝试编写一个程序来创建如下进程:
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);
}
如果 P4 和 P5 从 P1 分叉,我在 P2、P3 之后运行 P4 和 P5 时遇到困难。请帮忙
解决方法
如果你希望 P2 和 P3 在 P4 和 P5 开始之前完成,P1 应该在第一次分叉后等待它们完成,而不是在完成 2 次分叉的整个循环之后。
您正在并行启动 P2 和 P4。
这是第一个问题,除了不确定 P3 和 P5 是如何创建的,因为子进程(P2 和 P4)会立即退出而不创建它们。您可能需要从 IF 内部调用一些叉子,不是吗?