當我從父母那裏撥打kill(Child_PID, SIGSTOP);
時,我希望孩子停止執行,並且父母繼續。這是預期的行爲,還是我必須顯式聲明子級中的SIGSTOP處理程序?我到處搜索,無法找到這些信息。將SIGSTOP發送給子進程會停止所有執行。 C
謝謝。 Braden
當我從父母那裏撥打kill(Child_PID, SIGSTOP);
時,我希望孩子停止執行,並且父母繼續。這是預期的行爲,還是我必須顯式聲明子級中的SIGSTOP處理程序?我到處搜索,無法找到這些信息。將SIGSTOP發送給子進程會停止所有執行。 C
謝謝。 Braden
這是預期的行爲。
使用strace your_program
來查看發生了什麼。
這是預期的行爲。從unix手冊頁引用:
信號SIGKILL和SIGSTOP不能被捕獲,阻塞或忽略。
和BSD手冊頁提到:
信號()函數將失敗,如果不採取行動將發生 下列之一發生:
[EINVAL] The sig argument is not a valid signal number. [EINVAL] An attempt is made to ignore or supply a handler for SIGKILL or SIGSTOP.
總而言之,您不允許爲SIGSTOP安裝處理程序。並且該過程將保持暫停狀態,直到它收到SIGCONT
。
我遇到過這類問題。嘗試運行'ps',看看它是否真的停止了(它應該)。我懷疑你應該在你的'waitpid()'中添加'WUNTRACED'來檢測你主進程中停止的子進程。 – 2018-01-17 11:03:37