我有一台 Ubuntu 服务器 20。我正在运行 4 个具有以下名称的进程:
project-A
project-B
project-C
project-D
一切运行良好,但有时我看到其中一个项目消耗 CPU 并达到 300%。
因此我希望脚本在 CPU 使用率达到 300% 时终止(例如)“项目 B”。
答案1
以下脚本应终止md5sum
使用超过 50% CPU 的任何进程。根据需要替换md5sum
和。50
while true; do
PID=$(pidof -s md5sum || cat /proc/sys/kernel/pid_max)
if [[ $(ps -p $PID -o %cpu= |grep -Po '^\s*\K[0-9]+') -gt 50 ]]; then
echo killing PID $PID
kill $PID
fi
sleep 1
done
笔记:
- 在替换上述脚本之前,请尝试
pidof -s your_process
确保它可以正常工作。md5sum
- 如果上述方法不能真正终止该进程,则可能需要使用蛮力
kill -9 $PID
而不是kill $PID
,但只有在第一种方法不起作用时才这样做。 - 要在一行中执行一次上述操作(不使用循环):
PID=$(pidof -s md5sum || cat /proc/sys/kernel/pid_max); if [[ $(ps -p $PID -o %cpu= |grep -Po '^\s*\K[0-9]+') -gt 50 ]]; then echo killing PID $PID; kill $PID; fi
解释:
while true; do ... sleep 1; done
循环直到按下 ctrl-c;这也允许终止多个匹配的进程pidof -s md5sum || cat /proc/sys/kernel/pid_max
md5sum 进程的第一个 (-s
) 进程 ID,如果没有,则为不存在的 PIDps -p $PID -o %cpu=
$PID 进程的 CPU 利用率(以十进制百分比表示)|grep -Po '^\s*\K[0-9]+'
将 CPU 百分比剥离为整数if [[ ... -gt 50 ]]
如果 ... 大于 50