簡體   English   中英

(waitpid((pid_t)-1, NULL, WNOHANG) 如何跟蹤要返回的子進程?

[英]How does (waitpid((pid_t)-1, NULL, WNOHANG) keep track of child processes to be returned?

我正在編寫一個程序,其中可以創建多個子進程,並且即使子進程尚未終止,父進程也會繼續執行。 但是,一旦它們終止,我希望在提示用戶創建更多子進程之前打印它們。

根據我對(waitpid((pid_t)-1, NULL, WNOHANG) 的理解,它應該等待並檢查所有終止的子進程

  • 如果沒有終止的進程,則返回 0
  • 返回終止進程的pid
  • 返回 -1 表示錯誤

它是否為每個終止的子進程返回多個返回值?

pid_t temp;
while(waitpid((pid_t)-1, NULL, WNOHANG)){
     temp = (waitpid((pid_t)-1, NULL, WNOHANG) 
     if(temp == -1)
          //error code
     else if(temp == 0)
          break;
     else{
         //fprintf pid of terminated child process

         //this statement never gets executed when I run the code 
     }
}

(不是在尋找代碼;只是想知道我是否正確理解了這個概念:-/ 通讀 man 以獲取 waitpid)

謝謝!

更好的做法是使用SIGCHLD信號,當其一個子進程死亡時,它會發送到父進程。 因此,在 parent 中捕獲它可以讓你做出你需要的每一個決定,例如通過等待你基本上做的方式(在非阻塞模式下循環waitpid )來構建當前死亡的孩子的列表。 請注意,對waitpid每次調用都會捕獲一個死進程(不要完全按照您的方式調用它,有關於此主題的評論)。 然后就在打印提示之前,您可以打印此列表的內容,同時清理該列表。 小心在此期間暫時阻止SIGCHLD傳遞,以防止自動並發列表管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM