私はいくつかの並列プログラミング(マルチプロセッシング)を行っており、親に次のことを行う必要があります。
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 つの出力しか表示されないはずですが、それ以上の出力が表示されます。