我在程序中使用有限的while循环并通过fork(并行)子进程,在每个子进程上执行exec。我希望只有在所有子进程终止后,父进程才恢复执行(即此while循环之后的点)。我该怎么做?
我尝试了几种方法。在一种方法中,我让父进程在while循环后暂停,并从SIGCHLD处理程序发送某些条件,仅当waitpid返回错误ECHILD(没有剩余的子进程)时才会发生。但是我在这种方法中遇到的问题是,即使在父进程完成fork所有进程之前,retStat也会变为-1。
void sigchld_handler(int signo) {
pid_t pid;
while((pid= waitpid(-1,NULL,WNOHANG)) > 0);
if(errno == ECHILD) {
retStat = -1;
}
}
**//parent process code**
retStat = 1;
while(some condition) {
do fork(and exec);
}
while(retStat > 0)
pause();
//This is the point where I want execution to resumed only when all children have finished
wait/waitpid
,则不需要自己处理SIGCHLD
。 - mob