此进程被标记为<defunct>
并且kill -9
无法终止它。我该怎么办?为什么无法终止此进程?
答案1
这种过程被称为僵尸进程。kill 命令对僵尸进程无效。从技术上讲,它们已经死了,您之所以看到它们,只是因为它们在进程表中仍有条目。
要从系统中移除僵尸进程,SIGCHLD
可以使用 kill 命令手动向父进程发送信号。如果父进程仍然拒绝收割僵尸进程,下一步就是移除父进程。当进程失去父进程时,init 将成为其新的父进程。Init 会定期执行 wait 系统调用来收割以 init 为父进程的任何僵尸进程。
答案2
Defunct 意味着它是一个僵尸进程 - 它实际上并不工作,它只是等待它的父进程调用来wait
接收它的返回值。
wait
函数可用于读取杀死僵尸进程的信号编号,因此它实际上是正确的行为。
要摆脱僵尸进程,你可以: - 杀死父进程(可能是控制台,你在那里输入命令) - 调用wait
父进程 - 忽略父进程中的 SIGCHLD,如果你从未调用过wait