我正在尝试改进我用作在容器内运行的(滥用的)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
.