僵尸进程无法被删除或杀死

僵尸进程无法被删除或杀死

我有一个僵尸进程拒绝删除,尝试过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>

答案1

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

摆脱僵尸进程:

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

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

杀死 -s SIGCHLD pid

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

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

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

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

答案2

好吧,在我用谷歌搜索之前我会说“你不能这样做”这个计算器问题。看来您可以使用来gdb调用waitpid()系统调用父进程僵尸进程。好技巧。

我的建议是不要这样做:无论“lightdm”是什么,它可能会经常在退出子进程后进行清理,或者它可能会假设它会清理。如果你waitpid()这样做gdb,你可能会被浇水lightdm

相关内容