2012-02-10 152 views
2

在我的服务器机器中,某些进程每天都处于停止状态。它会影响我的CPU使用率。需要编写一个shell脚本来杀死已失效的进程ID和父ID。如何通过shell脚本杀死linux已停用的进程

例如,当我运行下面的命令:

ps -ef|grep defunct. 

发现可能的值。因为我只需要杀死“[chrome]失效”进程。

样本条目: -

bitnami 12217 12111 0 Feb09 pts/3 00:00:00 [chrome] <defunct> 

我要杀死这个类型的铬条目。任何一个可以建议一些样品来杀死这些条目

+0

如果它不存在,它不能使用CPU。如果您看到CPU使用率增加,还有其他事情正在发生。而且,顺便说一句,这是SO的话题。它应该是[su] – 2012-02-10 07:16:41

+0

可能的重复[杀死UNIX系统上不存在的进程](http://stackoverflow.com/questions/356722/killing-a-defunct-process-on-unix-system) – user123444555621 2012-02-10 07:49:40

回答

2

它已经死了。父母需要收获,然后它会消失。

4

在父进程收集尸体或父母死亡之前,不运行的进程不会消失。当父进程死亡时,已停用的进程由PID 1继承(通常为PID 1;它是用作业指定的某个系统进程),PID 1用于等待死体并将其从进程表中删除。所以,严格来说,当他们的父母收集尸体时,死去的过程才会消失;当原始父母死亡时,新父母收集尸体,以便终止这个死去的过程。

因此,要么编写父代码,以便它等待其死亡的孩子,或杀死父进程。

请注意,停用的进程占用的资源非常少 - 基本上,进程表中的插槽和父级可以请求的资源(定时)信息。 话虽如此,去年我在一台机器上工作,每分钟有3个新的不存在的进程,由PID 1以外的系统进程拥有,这些进程没有被收获。诸如ps之类的东西花了很长很长的时间,当已停止的进程数量攀升至数十万时。 (解决方案是为o/s安装正确的修复包。)它们不是完全无害的,但有一些不是主要问题。