如何通过进程名称杀死运行超过x秒的进程?

如何通过进程名称杀死运行超过x秒的进程?

我想杀死所有运行时间超过 30 秒的 chrome 进程。

目前我正在使用下面的这个命令,但它会杀死所有 chrome 进程:

killall -9 chrome

答案1

Killall 和 pkill 都有“早于”选择器的概念。

killall 30s chrome
pkill --older 30 chrome

答案2

首先,您可以显示验证执行时间标准的所有 PID:

 > \ps -eo pid,etimes,args | \
 sed -nE 's/^\ +//;s/\ +/ /g;/chrome/p' | \
 cut -d' ' -f1,2 | while read -r -a ARRAY; do 
     [ "${ARRAY[1]}" -gt 30 ] && printf "%s\n" ${ARRAY[0]}
 done

一旦满意这会产生您想要的结果,只需将命令替换printfkill -9,如下所示:

 > \ps -eo pid,etimes,args | \
 sed -nE 's/^\ +//;s/\ +/ /g;/chrome/p' | \
 cut -d' ' -f1,2 | while read -r -a ARRAY; do 
     [ "${ARRAY[1]}" -gt 30 ] && kill -9 ${ARRAY[0]}
 done

不是您问题的一部分,但您可能需要考虑发送软/礼貌终止SIGTERM信号(仅使用kill ...或等效地使用kill -15 ...)而不是发送硬终止SIGKILL信号(使用kill -9 ...),具体取决于您想要终止的原因以及在什么条件下有问题的 Chrome 进程。有关该主题的更多信息,请参阅差异这里例如。

答案3

使用:

ps -eo pid,etimes,args |grep chrome

etimes将显示自进程启动以来经过的时间(以秒为单位)。

然后:

kill -9 <pid>

相关内容