我正在做一些并行编程(多处理),我需要父母:
Fork
几个孩子在创建所有孩子之后,只需等待所有孩子终止
在所有孩子都终止后,做一些其他的工作。
这是我尝试过的:
int main(int argc, char **argv[])
{
int j, i;
pid_t children[3];
int pid;
// Fork the processes
for(j = 0; j < 3; j++){
if((children[j] = fork()) == 0){
// Child process
for(i = 0; i < 2; i++){
printf("child %d printing: %d\n", j, i);
}
}else {
// In parent now
while (pid = waitpid(-1, NULL, 0)) {
if (errno == ECHILD) {
break;
}
}
printf("all children terminated. in parent now\n");
}
}
return 0;
}
没有给出正确的输出。“所有孩子都终止了。现在在父母中”被打印了好几次,甚至在所有孩子都死之前。此外,对于每个进程,我应该只看到 2 个输出,但我看到的更多。