我正在測試ptrace和信號。在發送ptrace信號後獲得殭屍進程
的問題是,當我轉發具有的sigaction的信號,然後經由kill(pid, SIGKILL)
提呈所述中斷信號到所述過程並且該過程被打印截至ps aux
輸出殭屍ptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)
之後。
只有當我退出「主」的過程,那麼殭屍進程已經等待收集其返回狀態(在「主」過程「的結束),因此它不再是一具殭屍。
當我接收到該信號處理函數信號和信號的值被分配給聲明爲volatile sig_atomic_t gotsig
(Rockkind)一個全局變量。
因此,在示蹤劑的主循環我檢查全局變量的值>0
然後I kill(pid, gotsig);
。
之後有這個ptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)
。
然後這個過程變成殭屍。
爲什麼會發生這種情況?這是正確的行爲嗎?
增加:
難道是因爲我們必須明確等待最新的ptrace調用後的孩子呢?爲了收穫其退出狀態?