進程創建等問題,我可能是一個基本問題。
我創建了一個固定數量的子進程,每個進程只是在打印他們的pid。問題出在我得到的輸出中。看一看:創建多個子進程時出現的問題
int main(){
pid_t pid=0;
int i=0,status=0;
for(i=0;i<3;i++){
pid=fork();
switch(pid){
case 0:{ //Child
printf("\nChild pid: %d",getpid());
exit(0);
break;
}
case -1: {//Error
printf("Error occured in fork");
exit(1);
break;
}
default:{
printf("\nParent id: %d",getpid());
printf("\nIts child id: %d",pid);
wait(NULL);
}
}
輸出:
Child pid: 1450
Parent id: 1445
Its child id: 1450
Child pid: 1455Its child id: 1450
Parent id: 1445
Its child id: 1455
Child pid: 1460Its child id: 1455
Parent id: 1445
Its child id: 1460
的問題是我不知道爲什麼只有父進程的第二個print語句中出現,而不是第一個,如果有的話。我知道我不等待我的子進程結束(坦率地說,我不知道我會怎麼做),但是如果父進程在結束它的子進程之前執行,爲什麼不出現它的打印語句,爲什麼\n
被忽略也在那一行。
任何幫助將不勝感激。
Thx。
更新:如果我將wait(NULL)
替換爲printf("\n%d\n",wait(NULL))
它給了我一個完美的輸出,沒有雜散打印。任何想法可以解決它?畢竟他們都做同樣的事情。
好的,我不會等待子進程的幫助嗎?如果那樣,你能否解釋我將如何做到這一點? – Urban
但是你*正在等待,請看'wait()'函數調用。有了孩子pid,我個人更喜歡'waitpid()',以防萬一。 – rodrigo
是的,我確實把這一點,但我真的不知道,如果這是放在正確的地方,或者如果itll工作even..thx反正。 – Urban