删除僵尸进程

时间:2016-05-27 07:32:34

标签: linux process signals zombie-process

我有一个用例,我有一个parent进程的进程,它生成各种child进程,每个进程监视一个ssh连接。这个parent进程应该作为服务的一部分无休止地运行。但是,当其中一个ssh连接关闭时,该child进程将成为zombie进程。这样,每次关闭zombie连接时,都会创建许多ssh个进程。

我希望尽可能减少zombie进程的数量。据我所知,SIGTERMSIGKILL会删除zombie进程。由于parent进程无休止地运行,因此等待zombie终止无法删除parent进程。

有没有办法删除僵尸进程?或者我理解错的东西?

1 个答案:

答案 0 :(得分:1)

在C编程中,您可以在父进程中使用waitpid系统调用。

在linux命令行或shell脚本中,您可以使用wait命令删除僵尸。

waitpid手册页,

waitpid()系统调用暂停执行调用进程,直到pid参数指定的子进程发生更改状态。默认情况下,waitpid()仅等待已终止的子节点,但此行为可通过options参数进行修改。

语法: -

pid_t waitpid(pid_t pid, int *status, int options);

如果你不想暂停父母,那么你就可以使用波纹管系统来清除僵尸进程。

int status;
waitpid(0, &status, WNOHANG);

当父进程确实收到子退出状态时,则只创建僵尸进程。因此,使用带有WNOHANG选项的waitpid,您可以收到子退出状态,如果提供了WNOHANG选项,它将不会阻止父级。是否有任何子项退出它将退出状态存储在状态变量中,然后返回。否则它不会等待,它只是返回。

尝试使用waitpid手册页来阅读有关waitpid系统调用的信息。