2012-04-02 172 views
3

我目前正在嘗試傳遞一個父進程,該進程應該對每個請求都有多個子進程,並且希望知道如何跟蹤子進程的數量並檢查是否有子進程已終止?父進程和多個子進程之間的通信

我曾嘗試使用管道通過使用read()函數進行通信以發回終止消息。但是,這會以某種方式阻止所有併發性並等待1個子進程完成並在處理下一個進程請求之前發回終止消息。

有沒有辦法解決這個問題?或者我必須使用共享內存,套接字等方法......?

我正在使用C語言,我只需要一種方式來跟蹤我有多少個孩子。我可以在父母程序中增加一個計數器,但是當一個孩子死亡?如何獲取該消息並使用它來減少父項中的計數器?

+0

您使用哪種語言和/或框架? – 2012-04-02 05:35:16

+0

需要傳達多少信息?溝通是雙向的嗎? – wallyk 2012-04-02 05:40:57

回答

2

在符合POSIX標準的平臺上,如果您只想知道子進程何時退出而沒有其他信息,則可以使用SIGCHLD信號。
SIGCHLD是當子進程終止時發送給進程的信號,您可以通過編寫自己的信號處理程序來處理它。它的返回值是退出的子進程的進程ID。

如果您需要在程序執行過程中定期父子進程之間的通信,那麼你將不得不使用某種Inter Process Mechanism(IPC),選擇其中的取決於像性能,需要的要素數量同步,需要串行通信等。