在我的服务器机器上,每天都有一些进程进入失效状态。它会影响我的 CPU 使用率。我需要编写一个 shell 脚本来终止已失效的进程 ID 和父进程 ID。
例如,当我运行命令时:
ps -ef|grep defunct.
它发现了许多值。因为我只需要杀死“[chrome] defunct”进程。
示例条目:-
bitnami 12217 12111 0 Feb09 pts/3 00:00:00 [chrome] <defunct>
我需要杀死这种类型的 chrome 条目。任何人都可以建议一些样本来杀死条目吗?
在父进程收尸或父进程死亡之前,不存在的进程不会消失。当父进程死亡时,已失效的进程由 PID 1 继承(通常是 PID 1;它是指定作业的某个系统进程),PID 1 旨在等待死者并将其从进程表中删除。因此,严格来说,已失效的进程只有在它们的父进程收集尸体时才会消失;当原来的父进程死亡时,新的父进程收集尸体,使不存在的进程最终消失。
因此,要么编写父代码,使其等待已死的子进程,要么终止父进程。
请注意,已停用的进程占用的资源非常少 - 基本上是进程表中的一个槽和父进程可以请求的资源(时间)信息。
话虽如此,去年我在一台机器上工作,每分钟有 3 个新的已失效进程,由 PID 1 以外的系统进程拥有,没有被收集。像 ps
这样的事情花了很长很长的时间,当死进程的数量攀升到数十万时。 (解决方案是为 o/s 安装正确的修复包。)它们并非完全无害,但有一些不是主要问题。