[英]Force the parent to reap a child process <defunct>
我一直在拼命地試圖從父進程中殺死一個子進程。
我嘗試過:1.殺死-15 PID
殺死-shotgun pid
殺死-9 pid
他們都解決了在Linux中使用ps -A時將子進程寫為:“ defunct”(僵屍)的問題。
如何終止進程並強制將其從進程表中清除。 我必須清理它,因為它在進程表中沒有記錄,這是我在代碼中驗證進程已死的方式。
謝謝 :-)
如果要收集子進程,則必須使用waitpid
要求其退出代碼。 從聯機幫助頁:
一個終止但尚未等待的孩子成為“僵屍”。 內核維護有關僵屍進程的最少信息集(PID,終止狀態,資源使用信息),以便允許父級稍后執行等待以獲得有關子級信息的等待。 只要沒有通過等待將僵屍從系統中刪除,僵屍就會消耗內核進程表中的一個插槽,如果該表填滿,將無法創建更多進程。
用法有點像:
#include <sys/types.h>
#include <sys/wait.h>
...
waitpid(child_pid, 0, 0);
如果您想立即返回,即使孩子還沒有退出:
waitpid(child_pid, 0, WNOHANG);
如果您只想收集所有僵屍孩子,而沒有找到有關特定孩子的信息,則可以執行以下操作:
waitpid(-1, 0, WNOHANG);
您可以循環執行此操作,直到waitpid
返回負數(即錯誤)並且errno指示ECHILD。
順便說一句,這還使您可以實際找出該進程的狀態,並在聯機幫助頁上閱讀以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.