[英]How am I supposed to use *status in waitpid(pid_t pid, int *status, int options)?
[英]How does (waitpid((pid_t)-1, NULL, WNOHANG) keep track of child processes to be returned?
我正在編寫一個程序,其中可以創建多個子進程,並且即使子進程尚未終止,父進程也會繼續執行。 但是,一旦它們終止,我希望在提示用戶創建更多子進程之前打印它們。
根據我對(waitpid((pid_t)-1, NULL, WNOHANG) 的理解,它應該等待並檢查所有終止的子進程
它是否為每個終止的子進程返回多個返回值?
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.