2014-03-28 191 views
1

我在C,會啓動與fork() 100個的子進程,然後等待他們使用一個循環等待到fininsh的程序。我想等待的最大時間量爲他們全部完成,所以父進程不會受阻停留如果他們中的一個是,如果該時間已經過去,殺死未完成的。非阻塞等待子進程退出

這將是最好的方式來做到這一點?

回答

0

爲所需的時間設置鬧鐘。如果警報觸發,請殺死您原先尚未死亡的孩子列表,並向他們發送適當的「離開」信號。

我建議先發送SIGTERM或SIGHUP;然後收集屍體。如果在另一個短暫的延遲之後還有剩餘,則發送SIGKILL信號。如果你太過戲劇性地(SIGKILL)太快,程序就沒有機會清理他們所做的任何混亂。

0

子進程需要的信號,他們完成的主要過程以某種方式(你可以讓他們傳遞一個信息返回給主進程,讓他們創建一個文件,說明他們已完成,或任何其他方式對你來說最簡單)。一旦該機制已經就位,對這些過程完成後,如果已經收到了他們的所有然後繼續對信號的主要過程檢驗,否則等待一定的時間再進行檢查。在這個循環中添加一個檢查以查看是否已達到最大超時時間,如果是,則繼續。