仅当特定数量的 PID 符合条件时才终止进程

仅当特定数量的 PID 符合条件时才终止进程

我正在尝试改进我用作在容器内运行的(滥用的)docker-compose healthcheck 的这个衬垫:

ps -C program.bin -o pid,pcpu --no-headers | awk '$2 > 98 {print $1}' | xargs kill -9

在当前形式中,我过滤了 CPU 利用率超过 98% 的 PID,并立即杀死任何匹配的 PID。

但是,我只想在生成的 PID 的确切数量具有高利用率时才杀死(换句话说,如果一个 program.bin PID 的 CPU 使用率超过 98%,则不要杀死它,但如果其中 2 个满足条件) ,杀掉他们两个)。有关如何执行此操作的任何指示?谢谢!

答案1

... | awk '
$2 >= 98 {c++; m[$1]} 
END { if (c >=2 ) for(i in m) print i }' | xargs -r kill -9

将消耗大量资源的进程存储在一个数组中,当且仅多个n进程高于阈值时打印它们,否则不打印任何内容。

如果没有给出参数,该-r选项指示xargs退出而不执行命令。否则执行kill.

相关内容