![Ubuntu 登录时显示“有 1 个僵尸进程”](https://linux22.com/image/584741/Ubuntu%20%E7%99%BB%E5%BD%95%E6%97%B6%E6%98%BE%E7%A4%BA%E2%80%9C%E6%9C%89%201%20%E4%B8%AA%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B%E2%80%9D.png)
当我登录我的机器时出现此消息:
There is 1 zombie process.
- 它告诉我什么?
- 这是我应该担心的事吗?
- 如果是,那么我应该做什么、怎么做?
答案1
没什么可担心的:
僵尸
在 Unix 操作系统中,僵尸进程或已终止进程是指已完成执行但仍在进程表中有一个条目的进程,允许启动它的进程读取其退出状态。用这个术语生动的比喻来说,子进程已经死亡但尚未被收割。
当一个进程结束时,与其相关的所有内存和资源都会被释放,以便其他进程可以使用它们。但是,进程表中的进程条目仍然存在。父进程会收到一个 SIGCHLD 信号,表示子进程已死亡;此信号的处理程序通常会执行 wait 系统调用,该调用会读取退出状态并移除僵尸进程。然后可以重新使用僵尸进程的进程 ID 和进程表中的条目。但是,如果父进程忽略了 SIGCHLD,僵尸进程将留在进程表中。在某些情况下,这可能是可取的,例如,如果父进程创建另一个子进程,则可确保不会为其分配相同的进程 ID。
来源 :http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process
答案2
我能够按照本教程结束僵尸进程 -https://vitux.com/how-to-kill-zombie-processes-in-ubuntu-18-04/。
基本上:
1)识别僵尸进程:
ps axo stat,ppid,pid,comm | grep -w defunct
2)终止父进程:
sudo kill -9 <parent_process_number>
答案3
正如接受的答案中所解释的那样,您有一个已完成执行但仍在进程表中的进程:https://serverfault.com/a/390216/48449
如果只有一个进程,这不会造成危害,但仍不应该发生。如果进程太多,而您没有重新启动或重启产生这些进程的父进程,则可能会达到允许的最大进程数并导致严重问题。
为了查明担心是否合适以及僵尸属于哪个其他进程,这对我有用:
ps -elf --forest | grep -C5 '<[d]efunct>'
如果有必要,请增加上下文行的数量以了解父进程,理想情况下修复该进程以使其“收获”其结束的子进程。