僵尸进程不能被删除或杀死

Aru*_*ane 2 process

我有一个拒绝删除的僵尸进程,尝试过 killall -9 1913 和 pkill 没有效果。任何帮助将不胜感激。运行 Ubuntu 12.04.2 LTS。谢谢你。

aruna@aruna-desktop:~$ ps -aux | grep Z
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
aruna     1913  0.0  0.0      0     0 ?        Z    12:07   0:00 [lightdm-session] <defunct>
Run Code Online (Sandbox Code Playgroud)

Raz*_*aza 6

看起来这个僵尸进程的根本原因是这里描述的错误。

摆脱僵尸进程:

你不能杀死僵尸进程,因为你可以用 SIGKILL 信号杀死正常进程——僵尸进程已经死了。请记住,除非系统上有大量僵尸进程,否则您不需要摆脱僵尸进程——一些僵尸进程是无害的。但是,有几种方法可以摆脱僵尸进程。

一种方法是向父进程发送 SIGCHLD 信号。这个信号告诉父进程执行wait()系统调用并清理它的僵尸子进程。使用 kill 命令发送信号,将下面命令中的 pid 替换为父进程的 PID:

kill -s SIGCHLD pid

但是,如果父进程没有正确编程并且忽略了 SIGCHLD 信号,这将无济于事。您必须杀死或关闭僵尸的父进程。当创建僵尸进程结束时,init 继承僵尸进程并成为它们的新父进程。(init 是 Linux 启动时第一个启动的进程,并被分配了 PID 1。) init 定期执行 wait() 系统调用来清理它的僵尸子进程,因此 init 将缩短僵尸的工作时间。您可以在关闭父进程后重新启动它。

如果父进程继续创建僵尸进程,则应该修复它,以便它正确调用 wait() 来获取其僵尸进程。如果系统上的程序不断创建僵尸程序,请提交错误报告。

当您使用l选项时ps,您可以找到父进程ID ,即ps -l,它将显示在PID,子进程将显示在PPID

您还可以使用pstree命令查看进程树。