查找(并杀死)旧进程


10

基本上,我需要能够扫描进程树并找到与某个名称匹配并开始运行一周以上的进程。一旦有了它们,我需要杀死它们。系统仍将所有进程视为处于运行状态,只是不使用任何系统时间。他们通常也将永远处于这种状态。

理想情况下,我希望找到类似的东西,但要针对流程。

系统是Debian linux,它将由cron编写脚本并运行,因此我对大型但可理解的东西没有真正的问题。


4
您如何区分旧的但重要的过程和您乐于杀死的过程?
斩波器

Answers:


9

你可以通过结合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 }'

它将打印已运行7天以上的所有与“ mycommand”匹配的命令的pid。用管道将列表杀死,就可以了:

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

很好,谢谢。完全忘记了ps中的格式化选项。
Ryaner 2009年

2
这并不表示您的进程运行“超过7天”。它显示了7天到少于8天之间运行的进程。
hobodave


4

killall --quiet --older-than 1w process_name


1
这在Ubuntu 16.04上很棒,您可以与-i(交互式)标志一起使用来测试并确保它针对的是您认为应该的进程。
ezwrighter

1

您需要的所有信息都可以从中获取ps -ef。请参见“ STIME”列。结合使用grep以梳理所需的流程。此时,您可以使用cut来获取所有匹配进程的pid,并将其传递给kill

如果您想了解更多详细信息,请告诉我。


我想要更多细节。其他答案是完全错误的。
hobodave 2010年

1

如果您是root用户,请清除垃圾(/ proc / fs proc / stat ...)

find /proc -maxdepth 1 -regex '/proc/[0-9]*' -type d -mtime +2 -exec basename {} \;

0

进程启动时,它将在/ proc文件系统中创建一个目录。您可以使用find命令获取早于7天的目录并按以下步骤终止进程:

find /proc -user myuser -maxdepth 1 -type d -mtime +7 -exec basename {} \; | xargs kill -9 

这也不起作用。它按find: warning: you have specified the -maxdepth option after a non-option argument -user, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.原样生成此警告,并且没有其他输出:移动-maxdepth作为第一个输出,它将不返回任何进程,而且我肯定很多应该匹配。
hobodave 2010年

如果要查找目录的创建日期,为什么还用mtime而不是ctime?从理论上讲,如果创建了另一个
子目录

0

这里没有人提到ps-watcher。我认为您也许可以使用elapsed2sec函数比较$ start_time,但我不确定。这是我的第一个想法:

[myproc]
occurs = every
trigger = elapsed2secs('$start_time') > 7*DAYS
action = <<EOT
  echo "$command has been running more than 7 days" | /bin/mail user\@host
  kill -TERM $pid
EOT

不知道这是否可行,但这应该是一个很好的起点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.