2009-10-29 58 views
7

當我等待一個特定的正在運行的進程組是一個子進程時,WIFEXITED返回true,表示進程已退出?這是它的工作方式?似乎有些我不理解....爲什麼WIFEXITED在運行過程中返回True?

if (waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG) == -1) 
    perror("Wait error"); 

if (WIFEXITED(pstatus)) { 
    strncpy(buf, "Exited", buf_size); 
    return 0; 

回答

6

正如你指定WNOHANG我覺得waitpid將返回0pstatus有它之前,所以WIFEXITED不與更新的數據工作的人的價值。

如果WNOHANG指定的一個或多個子女的pid指定 存在,但還沒有改變的狀態, 則返回0

+0

啊,我做了重新初始化爲0,但現在我有點明白了。但我不太明白如何判斷是否還在運行或者是否退出(沒有阻止)。 – 2009-10-29 12:23:22

+0

如果您的任何孩子改變了狀態(死亡),waitpid將返回一個正數。 – 2009-10-29 12:25:51

+0

哦,我現在明白了......我需要採取返回值和狀態值來獲取過程的狀態。 (返回值不僅僅是錯誤的)。謝謝! – 2009-10-29 12:40:26

相關問題