如何杀死父母1的<defunct>进程

我在RedHat箱子上运行Bacula。 存储守护进程bacula-sd不时停止工作,并且变成<defunct>

 [root@backup ~]# ps -ef | grep defunct | more root 4801 29261 0 09:25 pts/5 00:00:00 grep defunct root 5825 1 0 Oct18 ? 00:00:00 [bacula-sd] <defunct> 

我的问题是,我怎么能杀死这个过程呢? 它的父节点是1,就我所知,它是init,我不想杀死init进程,是吗?

“通常”杀死这个过程是行不通的:

 [root@backup ~]# kill -0 5825 [root@backup ~]# kill -9 5825 

非常感谢帮助!

编辑:运行

 [root@backup ~]# lsof -p 5825 

产生以下输出:

 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bacula-sd 5825 root cwd DIR 253,0 4096 3801089 /root bacula-sd 5825 root rtd DIR 253,0 4096 2 / bacula-sd 5825 root txt REG 253,0 2110599 368004 /usr/local/sbin/bacula-sd bacula-sd 5825 root mem REG 253,0 75284 389867 /usr/lib/libz.so.1.2.3 bacula-sd 5825 root mem REG 253,0 46680 3604521 /lib/libnss_files-2.5.so bacula-sd 5825 root mem REG 253,0 936908 369115 /usr/lib/libstdc++.so.6.0.8 bacula-sd 5825 root mem REG 253,0 125736 3606807 /lib/ld-2.5.so bacula-sd 5825 root mem REG 253,0 1602128 3606885 /lib/libc-2.5.so bacula-sd 5825 root mem REG 253,0 208352 3606892 /lib/libm-2.5.so bacula-sd 5825 root mem REG 253,0 125744 3606887 /lib/libpthread-2.5.so bacula-sd 5825 root mem REG 253,0 25940 3604573 /lib/libacl.so.1.1.0 bacula-sd 5825 root mem REG 253,0 15972 3604535 /lib/libattr.so.1.1.0 bacula-sd 5825 root mem REG 253,0 46548 3606908 /lib/libgcc_s-4.1.2-20080102.so.1 bacula-sd 5825 root mem REG 253,0 56422480 366368 /usr/lib/locale/locale-archive bacula-sd 5825 root 0r CHR 1,3 1545 /dev/null bacula-sd 5825 root 1r CHR 1,3 1545 /dev/null bacula-sd 5825 root 2r CHR 1,3 1545 /dev/null bacula-sd 5825 root 3u CHR 9,128 6469 /dev/nst0 bacula-sd 5825 root 4u IPv4 1023380 TCP backup:bacula-sd (LISTEN) bacula-sd 5825 root 5u IPv4 2693268 TCP backup:bacula-sd->backup:53957 (CLOSE_WAIT) bacula-sd 5825 root 7u IPv4 3248683 TCP backup:bacula-sd->backup:57629 (CLOSE_WAIT) bacula-sd 5825 root 8u IPv4 3250966 TCP backup:bacula-sd->backup:37650 (CLOSE_WAIT) bacula-sd 5825 root 9u IPv4 3253908 TCP backup:bacula-sd->backup:37671 (CLOSE_WAIT) 

你可以删除僵尸/死亡进程的唯一方法是杀死父母。 由于父母是init(pid 1),这也将取消你的系统。

这几乎让你有两个select。

  • 手动修改过程表,例如。 创build一个虚拟的过程,将虚假的过程作为虚拟的孩子链接,然后把它们杀掉。 相当危险,您可能需要手动清理其他进程资源,例如信号量和文件句柄。
  • 重新启动系统。

我会和第二个去。

你可以尝试重新启动init:

  # telinit u 

否则,我不会太担心。 它没有运行,它不占用任何资源,只是在那里,所以内核可以记住它。

检查是否有内核恐慌,

 # dmesg |tail 

检查进程是否处于“D”Unkillable睡眠状态,处于内核模式的某些尚未返回的系统调用(内核oops或其他原因) http://www.nabble.com/What-c​​auses-an -unkillable过程- td20645581.html

让我们恐慌下来吧? “僵尸”或“僵尸”进程不是一个过程 。 它只是在进程表中的一个条目,保存了退出代码。 因此,僵尸不占用资源,不占用CPU周期,不使用内存,因为它不是一个进程 。 不要让所有奇怪和痒的试图“杀死”僵尸进程。 就像他们的名字,他们不能被杀害,因为他们已经死了。 但不像大脑吃的那种,它们绝对不会伤害别人,也不会咬别的。

不要让僵尸进程吃掉你的大脑。 只是忽略他们。

如果僵尸有init作为其父,那么init已经停止正常工作。 初始化的一个angular色是清理僵尸。 如果不这样做,其他人都不会。 所以唯一的解决办法是重新启动。 如果初始化中断,然后重新启动可能会失败,所以我会closures重要的服务,同步文件系统,然后打电源button。

看起来像你有一个孤儿的过程。 据我所知杀死这些的唯一方法就是重新启动这个盒子。 我有时会在我的ESX服务器(这是Linux下的引擎盖)发生这种情况,主机重新启动是修复(从VMware支持)。

我是一个Windows的家伙,所以拿它的价值。