多个分叉,等待第一个完成
Multiple forks, wait for the first to finish
我对所有 fork
、exec
和 wait
函数有点陌生。我有一个任务,它需要我 fork
我的主进程 i 次,然后使用所有 children 为每个进程写入不同的 fifos。例如,如果我有 3 个 children,我将不得不写入 3 个不同的 fifos。然后,我的 parent 进程必须等待第一个进程完成对任何 fifo 的写入,然后从该特定 fifo 读取数据。让我感到困惑的是,我的 parent 进程必须等待第一个进程完成,而不是等待所有进程完成。如果我必须等待所有,我会使用 while(wait(NULL)>0)
。但是在这种情况下你会怎么做?我在下面写了一个示例代码:
pid_t *pid;
int i;
pid = malloc(sizeof(pid_t)*children);
for(i=0;i<children;i++)
{
if((pid[i]=fork())<0)
{ /* error */ }
if(pid[i]==0)
{
//WriteOnFifos
return 0;
}
else
{
//wait for the first process to finish
}
}
提前致谢。任何帮助,将不胜感激。
只需使用wait(NULL)
。如文档所述,它将等到其 children 之一终止。所以它会做你想做的,即:等待第一个 child 完成。
我对所有 fork
、exec
和 wait
函数有点陌生。我有一个任务,它需要我 fork
我的主进程 i 次,然后使用所有 children 为每个进程写入不同的 fifos。例如,如果我有 3 个 children,我将不得不写入 3 个不同的 fifos。然后,我的 parent 进程必须等待第一个进程完成对任何 fifo 的写入,然后从该特定 fifo 读取数据。让我感到困惑的是,我的 parent 进程必须等待第一个进程完成,而不是等待所有进程完成。如果我必须等待所有,我会使用 while(wait(NULL)>0)
。但是在这种情况下你会怎么做?我在下面写了一个示例代码:
pid_t *pid;
int i;
pid = malloc(sizeof(pid_t)*children);
for(i=0;i<children;i++)
{
if((pid[i]=fork())<0)
{ /* error */ }
if(pid[i]==0)
{
//WriteOnFifos
return 0;
}
else
{
//wait for the first process to finish
}
}
提前致谢。任何帮助,将不胜感激。
只需使用wait(NULL)
。如文档所述,它将等到其 children 之一终止。所以它会做你想做的,即:等待第一个 child 完成。