2012-02-10 151 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安裝正確的修復包。)它們不是完全無害的,但有一些不是主要問題。