簡體   English   中英

流程鏈從最后開始彼此結束

[英]Process chain ending each other from last

我有一個看起來像這樣的流程鏈:P0(主流程)創建P1,然后P1創建P2,依此類推...

當創建Pn時(n是一個隨機數〜10),除P0外的所有進程都需要通過SIGSTOP信號停止。 當所有它們都停止時,P0必須先進行printf(“所有進程已停止”),然后使用SIGCONT喚醒所有它們。

我已經輕松完成了很多操作,但這是問題所在:當P(n)喚醒(由P(n-1)喚醒)時,所有進程(P0除外)都需要終止,然后P0 printf(“ prog Prog ”)

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

無論如何,有一個想法可以確保在P9打印消息時殺死所有進程? 我將SIGCHLD用於P0,以了解何時停止了P1(因此停止了P2,P3,...)。 我也應該可以將其用於此目的,但是如何知道我是否在P0中收到此信號,因為P1被殺死,恢復或停止了?

我找到了解決方案,一旦所有進程都停止了,我將使用SA_NOCLDSTOP更新操作掩碼。 SA_NOCLDWAIT確保一旦調用我的SIGCHLD的處理程序,這將是因為子進程已死(並且沒有僵屍問題)。

暫無
暫無

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

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