基本上我需要能够扫描进程树并找到与某个名称匹配的进程,并开始运行超过一周.一旦我拥有它们,我需要杀死它们.系统仍然将所有进程视为处于运行状态,而不是使用任何系统时间.他们通常也会永远处于这种状态.
理想情况下,我想找到类似的东西,但是对于流程来说.
系统是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,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }'
这将打印匹配’mycommand’的所有命令的pids,这些命令已运行超过7天.管道列表杀死,你完成了:
ps -eo pid,comm | awk '$2~/^7-/ && $3~/mycommand/ { print $1 }' | kill -9