我的系统上有一个已失效的进程:
abc 22093 19508 0 23:29 pts/4 00:00:00 grep ProcA
abc 31756 1 0 Dec08 ? 00:00:00 [ProcA_my_collect] <defunct>
如何在不重新启动机器的情况下终止上述进程?我试过了
kill -9 31756
sudo kill -9 31756
我的系统上有一个已失效的进程:
abc 22093 19508 0 23:29 pts/4 00:00:00 grep ProcA
abc 31756 1 0 Dec08 ? 00:00:00 [ProcA_my_collect] <defunct>
如何在不重新启动机器的情况下终止上述进程?我试过了
kill -9 31756
sudo kill -9 31756
你已经杀死了进程,但是一个死进程不会从进程表中消失,直到它的父进程执行一个名为“reaping”的任务(本质上是调用wait(3)
那个进程来读取它的退出状态)。没有被收割的死进程被称为“僵尸进程”。
您看到的 31756 的父进程 id 是进程 id 1,它始终属于init
. 该进程应该定期获取其僵尸进程,但如果不能,它们将在进程表中保持僵尸进程,直到您重新启动。
您是否检查过可能需要先终止的子进程?有时,果酱已经结束了……试试ps -ef --forest
看看它下面可能有什么(如果有的话)然后先杀死那个,然后是你已经知道的那个
如果 kill -9 未能杀死进程,原因几乎总是驱动程序或操作系统错误。
init进程已经采用了进程,但是无法reap。也就是说:当 init 调用 wait(2) 时,该进程没有返回。init 的主要目的之一是收割死去的孤儿,所以问题不在于它的父母在收割之前就死了。想一想:否则,谁会在注销后获得 nohup 进程的结果?
杀死已失效进程的子进程不太可能有帮助,除非它们与您所看到的特定错误有关。
如果杀死父母不能解决它,你可能无法做到。无论出于何种原因,系统都没有收集该僵尸进程。
FWIW,我在我曾经管理的 SCO Openserver boxen 上看到了很多。大量的多用户使用和低系统资源,但它似乎并没有伤害任何东西。只是惹恼了我。:)
该过程可能会挂起,例如忽略 SIGPIPE 之类的信号,检查strace -p <pid>
这里发生的情况。