Linux

查找(並殺死)舊程序

  • May 20, 2020

基本上我需要能夠掃描程序樹並找到與某個名稱匹配並開始執行一周以上的程序。一旦我擁有它們,我需要殺死它們。所有程序仍然被系統視為處於執行狀態,只是不使用任何系統時間。他們通常也會永遠處於這種狀態。

理想情況下,我希望找到類似的東西,但對於流程。

系統是 Debian linux,這將由 cron 編寫和執行,所以我對一些大但可以理解的東西沒有真正的問題。

你可以結合 ps 、 awk 和 kill 來做到這一點:

ps -eo pid,etime,comm

為您提供三列輸出,其中包含程序 PID、自程序啟動以來經過的時間以及命令名稱,不帶參數。經過的時間看起來像以下之一:

mm:ss
hh:mm:ss
d-hh:mm:ss

由於您想要執行超過一周的程序,因此您將尋找與第三個模式匹配的行。您可以使用 awk 通過執行時間和命令名稱過濾掉程序,如下所示:

ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'

這將列印所有與“mycommand”匹配的命令的 pid,這些命令已經執行了 7 天以上。將該列表導入 kill 中,您就完成了:

ps -eo pid,etime,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9

引用自:https://serverfault.com/questions/71360