我有一个拒绝删除的僵尸进程,尝试过 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)
看起来这个僵尸进程的根本原因是这里描述的错误。
你不能杀死僵尸进程,因为你可以用 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
命令查看进程树。