我一直在拼命地试图从父进程中杀死子进程。强制父母收获一个子进程<defunct>
我已经试过: 1.杀-15 PID
杀-shotgun PID
杀-9 PID
它们全部位于儿童解决进程编写为: “defunct”(僵尸)时ps -A在linux中。
如何杀死进程并强制将其从进程表中清除。我必须清理它,因为它在进程表中缺少记录是我如何在代码中验证进程已经死亡。
感谢:-)
我一直在拼命地试图从父进程中杀死子进程。强制父母收获一个子进程<defunct>
我已经试过: 1.杀-15 PID
杀-shotgun PID
杀-9 PID
它们全部位于儿童解决进程编写为: “defunct”(僵尸)时ps -A在linux中。
如何杀死进程并强制将其从进程表中清除。我必须清理它,因为它在进程表中缺少记录是我如何在代码中验证进程已经死亡。
感谢:-)
如果你想收集子进程,你要问使用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。
顺便说一下,这也可以让您真正了解进程的状态,请阅读联机帮助页以获取更多信息。
父进程是你的吗?你可以立即用双叉和双腿执行孩子的孤儿...... –
等一下,''-shotgun''? –
@ jonas是啊,我在这里看到它... ik ik –