我不確定我是否試圖將一個方形的釘子粘到圓孔中,但我試圖使用信號來協調五個或六個子過程與他們的父項。我有父設置來處理這些信號C中的信號進程間通信 - 爲什麼會失敗?
signal(1, SigControllerCarWaiting1);
signal(2, SigControllerCarWaiting2);
signal(3, SigControllerCarWaiting3);
signal(4, SigControllerCarWaiting4);
signal(5, SigControllerCarWaiting5);
signal(6, SigControllerCarEnter1);
signal(7, SigControllerCarEnter2);
signal(8, SigControllerCarEnter3);
signal(9, SigControllerCarEnter4);
signal(10, SigControllerCarEnter5);
而且它主要工作。當我運行我的程序時,它會多次按預期完成。但有些時候,它將無法覆蓋默認行爲,並且我的父進程會輸出類似'Hangup'的內容,然後終止....讓一堆子仍在執行。
我試圖重新建立的處理程序,如信號...
void SigControllerCarWaiting5() { signal(5, SigControllerCarWaiting5); SigControllerCarWaiting(4); }
void SigControllerCarWaiting4() { signal(4, SigControllerCarWaiting4); SigControllerCarWaiting(3); }
void SigControllerCarWaiting3() { signal(3, SigControllerCarWaiting3); SigControllerCarWaiting(2); }
void SigControllerCarWaiting2() { signal(2, SigControllerCarWaiting2); SigControllerCarWaiting(1); }
void SigControllerCarWaiting1() { signal(1, SigControllerCarWaiting1); SigControllerCarWaiting(0); }
但它似乎並沒有產生影響。有時它運行得很好;其他時候,它會失敗,信號文本並殺死父母。我對這一切都很陌生,認爲有人可以指出我正確的方向。除了'signal(ID,Function)以外,還有什麼東西可以用來捕獲多個輸入信號?
如果我只用一個子進程運行它,它永遠不會失敗。所以我認爲這與兒童之間的種族差異有關......但我無法在追蹤中取得任何進展。
編輯
經過進一步調查,我發現使用的sigaction而不是信號推薦網站...但我似乎仍然有同樣的問題。有時,信號不會被我處理,並導致我的過程提前結束。
[在c,linux中使用信號的進程間同步]可能的重複(http://stackoverflow.com/questions/6200225/interprocess-synchronization-using-signals-in-c-linux) –
爲什麼你不使用管道或信號量,還是沿着這些線? –
始終檢查系統調用的返回值;這樣做會告訴你信號9(SIGKILL)沒有改變。 –