2016-11-20 41 views
1

爲了知道是否等待()工作過,會是正確的,以檢查它像下面?從理論上講,如果等待()不會失敗,應該返回到父進程結束的孩子PID,否則父PID爲1,對不對?察看wait()的失敗

switch (process = fork()) 
{ 
    case -1: 
     // Fork fail 
     perror("Fork failed"); 
     exit(EXIT_FAILURE); 

    case 0: 
     //Child process 
     HERE CODE DOES SOMETHING 
     exit(EXIT_SUCCESS); 
    default: 
     //Parent process 
     pid=wait(&status); 

     if(pid==1){ 
      perror("Wait failed"); 
     }else{ 
     exit(EXIT_SUCCESS); 
     } 
} 
+1

閱讀函數的文檔主要是幫助:http://man7.org/linux/man-pages/man2/waitpid.2 html的 – alk

+1

除此之外'wait'返回-1,而不是1的錯誤,這是包含在現有的答案的情況下,可以考慮使用'waitpid',以確保您正在等待你只是派生的過程,而不是事實第一個子進程發生退出(可能會被分離出來,或者被另一個線程分離)。此外,這是一個好主意,調用'_exit',而不是'exit',以防止子進程繼承了父母的stdip緩衝區無意沖洗。 – user4815162342

+1

@ user4815162342謝謝。 – krm

回答

5
引用

man 2 wait

返回值

等待():成功,則返回終止子的進程ID; 上 錯誤,則返回-1

所以要檢查是否wait(2)失敗,這已經足夠了:

if (wait(&status) == -1) { 
    perror("wait failed"); 
    exit(1); 
} 
+0

更好地利用這個http://man7.org/linux/man-pages/man2/waitpid.2.html以供參考。它更準確,更新,更少。 – alk