2013-04-22 81 views
0

我正在測試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調用後的孩子呢?爲了收穫其退出狀態?

回答

0

參考您的另外:是

只要父母沒有處理,因爲一個孩子的死亡發送SIGCHLD,孩子保持一個殭屍。

如果父死亡而孩子是殭屍,孩子是由init(通常PID 1)和在正常情況下不init prcosess未決SIGCHLD,這又導致對兒童dieing正確繼承。