如果cpu使用率小于x,如何遍历进程并终止它

时间:2015-03-01 17:48:17

标签: bash awk grep

所以我的目标是杀死卡住转码媒体的进程。所有进程都由runit监视,因此当进程被终止时 - 它会重新启动。

我可以通过以下方式获取进程列表:

ps aux | grep -v grep | grep ffmpeg | awk '{print $2, $3}' 

我需要什么才能让任何进程被杀死,返回< 20 on $ 3 - 换句话说,进程使用的CPU少于20%?

3 个答案:

答案 0 :(得分:1)

pgreg(1)可以为您提供一个pids列表。因此,pgrep ffmpeg会为您提供一个运行2345 15678 9870的进程pid列表(例如ffmpeg)。因此ps u $(pgrep ffmpeg)为您提供了一个进程列表。

您希望过滤运行少于20%CPU的进程。尝试

ps u $(pgrep ffmpeg) | awk '{if ($3 < 20.0) { print "kill " $2 }}'

这应该会给你几行kill 12345。把它们送到一个shell:

  ps u $(pgrep ffmpeg) | awk '{if ($3 < 20.0) { print "kill " $2 }}' | sh

您可能可以使用pkill(1)GNU awk函数system。您可能希望ps u跳过标题行输出,也可以将/USER/{next}同时提供给awk

答案 1 :(得分:1)

使用awk而不使用grep的另一种方法

ps aux|awk '{if($11~ "ffmpeg" && $3<20.0){system("kill -9 "$2)}}'

($11~ "ffmpeg" && $3<20.0) # if field $11 (COMMAND column) matches "ffmpeg" and field $3 (PID column) is less than 20.0, kill PID no. which is in field $2

答案 2 :(得分:0)

另一种方法:

ps axo comm,pid,pcpu | awk '/^ffmpeg/ && $3 < 20 {print $2}' | xargs -r kill -9