强制父级获得子进程<defunct> </defunct>

时间:2012-11-11 13:33:25

标签: c++ linux zombie-process

我一直在拼命想要从父母那里杀死一个子进程。

我试过了: 1.杀死-15 pid

  1. kill -shotgun pid

  2. kill -9 pid

  3. 他们都决定将子进程写成: “defunct”(僵尸)当ps -A在linux中时。

    如何终止进程并强制从进程表中清除进程。我必须清理它,因为它在进程表中缺少记录是我在代码中验证进程是否已经死亡。

    谢谢: - )

1 个答案:

答案 0 :(得分:6)

如果要收集子进程,则必须使用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。

顺便说一句,这也允许您实际了解该流程的状态,请阅读联机帮助页以获取更多信息。