首页 > 解决方案 > 使用 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 时会遇到困难。请帮助

标签: forkwaitpid

解决方案


如果您希望 P2 和 P3 在 P4 和 P5 开始之前完成,P1 应该在第一次分叉之后等待它们完成,而不是在完成 2 次分叉的整个循环之后。

您正在并行启动 P2 和 P4。

这是第一个问题,除了不确定如何创建 P3 和 P5 之外,因为子进程(P2 和 P4)会立即退出而不创建它们。您可能需要从 IF 内部调用一些分叉,不是吗?


推荐阅读