使用fork并行运行子进程

时间:2013-11-24 07:33:47

标签: process fork parent-child wait

我需要创建“n”个子进程,并且它们必须在一个随机的秒数内休眠,并且父进程必须建议任何子进程何时完成。问题是每个子进程一个接一个地运行,我需要它们并行工作。 (在代码中我只创建了3个孩子。)

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

int main(void)
{
 pid_t pid;
 int x,zeit,status,w,n=0;

 for(x=1;x<=3;x++)
 {
 pid=fork();  
    n++;
    srand(time(NULL));
  if(pid)
  {

    w=wait(&status);

   printf("Process %d finished in %d seconds (Dad:%d cuenta %d)\n",w,WEXITSTATUS(status),getppid(),n);

  }
  else
  {
   int n;
   zeit=rand()%3+1;
   sleep(zeit);
   exit(zeit);

  }

 }
exit(0);
 return 0;
}

1 个答案:

答案 0 :(得分:2)

在开始下一个过程之前,您明确等待每个过程完成

for(x=1;x<=3;x++)
{
  pid=fork();  
  n++;
  srand(time(NULL));
  if(pid)
  {  
    w=wait(&status);    
    printf("Process %d finished in %d seconds (Dad:%d cuenta %d)\n",
           w, WEXITSTATUS(status), getppid(), n);
    ...
  }

如果您希望它们并行运行,您将不得不制作3个不同的流程,并在之前启动它们,等待其中任何一个完成。