我在做一些並行編程(多),我需要的家長:如何等待所有孩子在父母離開之前終止?
1)Fork
幾個孩子
2)所有的孩子都被創建,只需等待他們全部結束
3)所有的孩子終止後,做一些其他的工作。
這是我的嘗試:
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個輸出,但我看到更多。任何幫助都會被處理。
你所說的 「孫子」 是什麼意思?我需要父母分娩n個孩子(在這種情況下是3),等待他們,我沒有做任何孫子... – PoweredByOrange
你不打算有孫子,但你正在做他們。第一個孩子打印「孩子%d打印:%d \ n」,然後轉到j循環的頂部並調用fork。 –
哦,那麼我怎麼能沒有創造孫子的循環?! – PoweredByOrange