簡體   English   中英

強迫父母收獲子進程<defunct>

[英]Force the parent to reap a child process <defunct>

我一直在拼命地試圖從父進程中殺死一個子進程。

我嘗試過:1.殺死-15 PID

  1. 殺死-shotgun pid

  2. 殺死-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM