我可以删除[php] <defunct>进程</defunct>

时间:2013-06-14 13:59:46

标签: linux process kill-process

我创建了一个PHP脚本,它读取一些数据并使用pctnl_fork启动一个新进程来处理数据。子进程完成后,它们将作为进程保留。 ps aux显示了一个像

这样的过程列表
demo       32229  0.0  0.0      0     0 pts/0    Z    12:23   0:00 [php] <defunct>
demo       32251  0.0  0.0      0     0 pts/0    Z    11:50   0:00 [php] <defunct>
demo       32284  0.0  0.0      0     0 pts/0    Z    11:50   0:00 [php] <defunct>
demo       32298  0.0  0.0      0     0 pts/0    Z    12:56   0:00 [php] <defunct>
demo       32303  0.0  0.0      0     0 pts/0    Z    11:50   0:00 [php] <defunct>
demo       32316  0.0  0.0      0     0 pts/0    Z    12:23   0:00 [php] <defunct>

我是否可以安全地终止此进程,因为父进程仍在创建新进程来执行某些工作?我知道我应该启动命令管道到stderr(根据这个主题Insane crond behavior. keeps making defunct bash processes现在已经太晚了。 父进程正在后台运行。

2 个答案:

答案 0 :(得分:6)

doing some research之后,您似乎必须终止这些已解散的子进程的父进程才会消失。

链接中最相关的引用说:“你不能杀死一个已经死亡的已经失效的过程(a.k.a zombie)。”

答案 1 :(得分:1)

所以,正如你所说, PHP中的命令,例如

$a;
pcntl_waitpid($child_pid, $a, WNOHANG|WUNTRACED);

将完成这项工作。 对我来说,还好吧!