2013-09-27 24 views
0

我有過程的看起來像這樣 P0(主處理)的鏈終止彼此過程鏈創建P1,然後P1創建P2,等...從最後

當Pn的創建(n是隨機number〜10),除了P0之外的所有進程都需要通過一個SIGSTOP信號停止。當它們全部停止時,P0必須printf(「所有進程停止」),然後用SIGCONT喚醒它們。 (P(n-1))喚醒P(n)時,所有進程(P0除外)都需要被終止,然後P0 printf (「編完」)

我不能使用wait,waitpid。 我試圖讓Pn發送一個信號給P0,然後P0發送一個SIGTERM信號給所有進程,但是Pn總是會在P0後結束,這樣做不好。 我也試圖讓Pn殺死P(n-1)和P(n-1)殺死P(n-2),同樣的問題。

無論如何有一個想法,以確保所有的進程都在P9打印消息時被殺死? 我用P0的SIGCHLD知道P1何時停止(因此P2,P3,...)。我也應該可以使用它,但是我怎麼能知道我是否在P0中得到這個信號,因爲P1被殺死,恢復或停止?

+0

請求不要使用'wait','waitpid'來自哪裏?你死去的孩子進程將成爲殭屍,直到等待。 – fizzer

+0

這是我必須做的練習,所以我沒有選擇 – badoualy

回答

0

我發現解決方案,一旦所有進程都停止了,我正在用SA_NOCLDSTOP | SA_NOCLDWAIT來確保一旦我的SIGCHLD的處理程序被調用,這將是因爲子進程已經死了(並且沒有殭屍問題)。