【问题标题】:How to kill linux defunct process by shell script [closed]如何通过shell脚本杀死linux失效进程[关闭]
【发布时间】:2012-02-10 06:20:55
【问题描述】:
在我的服务器机器中,每天都有一些进程进入失效状态。它会影响我的 CPU 使用率。需要编写一个shell脚本来杀死已失效的进程ID和父ID。
例如,当我运行命令时:
ps -ef|grep defunct.
找到可能的值。在那我只需要杀死“[chrome] defunct”进程。
示例条目:-
bitnami 12217 12111 0 Feb09 pts/3 00:00:00 [chrome] <defunct>
我需要终止这种类型的 chrome 条目。任何人都可以建议一些样本来杀死条目
【问题讨论】:
-
如果它已经失效,它就不能消耗 CPU。如果您看到 CPU 使用率增加,则会发生其他事情。而且,顺便说一句,这对 SO 来说是题外话。它应该在Super User
-
标签:
linux
shell
zombie-process
【解决方案1】:
在父进程收集尸体或父进程死亡之前,不存在的进程不会消失。当父进程死亡时,失效的进程由 PID 1 继承(通常是 PID 1;它是由作业指定的某个系统进程),PID 1 旨在等待死体并将其从进程表中删除。因此,严格来说,只有当它们的父进程收集尸体时,已失效的进程才会消失。当原来的父母死去时,新的父母会收集尸体,这样已经失效的进程终于消失了。
因此,要么编写父代码以等待其死去的子进程,要么终止父进程。
请注意,已失效的进程占用的资源非常少——基本上,进程表中的一个槽和父进程可以要求的资源(时间)信息。
话虽如此,去年我在一台机器上工作,每分钟有 3 个新的已失效进程,由 PID 1 以外的系统进程拥有,这些进程没有被收集。像ps 这样的事情花了很长时间,当失效进程的数量攀升至数十万时。 (解决方案是为 o/s 安装正确的修订包。)它们并非完全无害,但有一些不是主要问题。