Ubuntu 在登录时显示“有 1 个僵尸进程”

Joh*_*Mee 58 ubuntu zombie

当我登录到我的机器时出现此消息:

There is 1 zombie process.
Run Code Online (Sandbox Code Playgroud)
  • 它在告诉我什么?
  • 这是我应该担心的吗?
  • 如果是,那我应该怎么做,怎么做?

Mar*_* R. 43

没有什么可担心的:

僵尸

在 Unix 操作系统上,僵死进程或死进程是一个已经完成执行但在进程表中仍然有一个条目的进程,允许启动它的进程读取其退出状态。在这个术语丰富多彩的比喻中,子进程已经死亡但尚未收割。

当一个进程结束时,与其相关的所有内存和资源都被释放,以便其他进程可以使用它们。但是,进程表中的进程条目仍然存在。父母收到一个 SIGCHLD 信号,表明孩子已经死亡;这个信号的处理程序通常会执行等待系统调用,它读取退出状态并删除僵尸。然后可以重复使用僵尸进程 ID 和进程表中的条目。但是,如果父进程忽略 SIGCHLD,则僵尸进程将留在进程表中。在某些情况下,这可能是可取的,例如,如果父进程创建另一个子进程,它会确保不会为其分配相同的进程 ID。

来源:http : //wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process

  • 抱歉,您只回答了他问题的第一部分。目前还不清楚人们是否应该担心它以及如何处理它。 (11认同)
  • 谢谢马克很好的描述;现在我将如何找到它,确定是否保留它,如果不保留,则删除它(和消息)。 (4认同)
  • 如果这是您问题的真正答案,请不要忘记接受我的回答;) 谢谢! (2认同)

小智 22

我能够按照本教程结束僵尸进程 - https://vitux.com/how-to-kill-zombie-processes-in-ubuntu-18-04/

基本上:

1)识别僵尸进程:

ps axo stat,ppid,pid,comm | grep -w defunct
Run Code Online (Sandbox Code Playgroud)

2)杀死父进程:

sudo kill -9 <parent_process_number>
Run Code Online (Sandbox Code Playgroud)

前任: 在此处输入图片说明

  • 除非您知道进程的用途,否则不应终止它们。在某些设置中,“大量僵尸”是正常的,它们稍后会被清理——例如,Jenkins 控制 docker 容器,在容器内启动一个 `cat` 进程以保持其运行,然后通过以下方式提交实际作业: `docker exec`,但这使得 `cat` 进程负责收获僵尸,但它并没有这样做。构建完成后,“cat”进程退出,僵尸进程会正常回收,在此之前,它们会使用数千字节的内存。 (6认同)
  • 对于像我这样的其他人,parent_process_number 是显示的两个数字中的第一个。 (4认同)

exi*_*xic 6

如已接受的答案中所述,您的流程已完成执行但仍在流程表中:https : //serverfault.com/a/390216/48449

如果这只是一个过程,这应该不会造成伤害,但仍然不应该发生。如果有太多并且您没有重新启动或重新启动产生这些的父进程,您可能会达到允许的最大进程数并导致严重问题。

要确定担心是否合适以及僵尸属于哪个其他进程,这对我有用:

ps -elf --forest | grep -C5 '<[d]efunct>'
Run Code Online (Sandbox Code Playgroud)

如有必要,增加上下文行的数量以了解父进程,理想情况下修复该进程以使其“收获”其结束的子进程。