我在使用fork
函數時遇到問題。我想編寫一個程序,C程序子進程在父進程之前再次擦除
- 派生四個過程
- 打印每個進程的PID,地重複印刷的PID
- 打印父母的PID
但是,當最後一個子進程結束我不能跳回到第一個子進程,只打印最後一個孩子的PID。如何在父進程之前再次運行子進程?
int noOfPlayer=4;
int pid,myid,status,grandchild;
int i=0;
int a=1;
int x=1;
myid = getpid();
for(i=0;i<noOfPlayer;i++){
pid=fork();
if(pid<0){ //error occurred
printf("Fork Failed\n");exit(1);
} else if (pid==0) {//child process
myid=getpid();
printf("Child %d, pid %d\n",i+1,myid);
printf("ABC Child %d, pid %d\n",i+1,myid);
exit(0);
} else { //parent process
wait(NULL);
}
}
printf("I am parent, pid %d: all children finished\n", myid);
結果是
兒童1,PID 21989
ABC兒童1,PID 21989
兒童2,PID 21990
ABC兒童2,PID 21990
兒童3,PID 21991
ABC孩子3,孩子21991
孩子4,孩子21992
孩子4,孩子21992
我的父母,PID 21988:所有的孩子完成
但我想
兒童1,PID 21989
兒童2,PID 21990
兒童3,PID 21991
兒童4,PID 21992
ABC子1,PID 21989
ABC子2,PID 21990
ABC子3,PID 21991
ABC子4,PID 21992
對我不太清楚。你有一些代碼給我們看? –
「跳回第一個孩子的過程」是什麼意思? – Downvoter
您的輸出是可預測的,因爲您一次只運行一個子進程(父進程等待每個進程退出)。無論如何,你可能想在循環外面「wait()」。這仍然可能不會給你你期望的輸出(因爲孩子之間沒有訂單保證,並且標準輸出可能被緩衝) – Hasturkun