使用 fork 和 wait 创建多个进程

问题描述

我正在尝试编写一个程序来创建如下进程:

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 内部调用一些叉子,不是吗?