如何杀死父进程 1

如何杀死父进程 1

我在 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)

答案1

删除僵尸/已失效进程的唯一方法是终止父进程。由于父进程是 init (pid 1),因此这也会破坏您的系统。

这实际上给你留下了两个选择。

  • 手动修改进程表,例如创建一个虚拟进程,将已停止的进程链接为虚拟进程的子进程,然后将其终止。这非常危险,您可能必须手动清理其他进程资源,例如信号量和文件句柄。
  • 重新启动系统。

我选择第二种。

答案2

检查是否存在内核恐慌,

# dmesg |tail

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

答案3

您可以尝试重新启动 init:

 # telinit u

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

答案4

让我们不要那么恐慌,好吗?“失效”或“僵尸”进程不是一个过程。它只是进程表中的一个条目,带有保存的退出代码。因此,僵尸进程不占用任何资源,不占用任何 CPU 周期,也不使用任何内存,因为这不是一个过程。不要因为试图“杀死”僵尸进程而感到奇怪和不安。就像它们的名字一样,它们无法被杀死,因为它们已经死了。但与吃脑子进程不同,它们绝对不会伤害任何人,也不会咬其他进程。

不要让僵尸进程吞噬你的大脑。忽略它们就行。

相关内容