用于监视进程的bash脚本';s内存使用率并杀死它
我正在寻找一个bash脚本,它允许我在后台启动一个进程,比如每10分钟监控一次它的内存消耗,如果超过某个值,就杀死它 编辑 我可以正确地获取我想要终止的进程的正确pid,但是sudo kill“$FIRST”命令似乎不起作用,在退出脚本后,在控制台上键入htop,该进程仍然处于活动状态。 另外,如果我直接在控制台上键入sudo kill#pid,该命令将起作用并终止进程用于监视进程的bash脚本';s内存使用率并杀死它,bash,unix,memory-management,Bash,Unix,Memory Management,我正在寻找一个bash脚本,它允许我在后台启动一个进程,比如每10分钟监控一次它的内存消耗,如果超过某个值,就杀死它 编辑 我可以正确地获取我想要终止的进程的正确pid,但是sudo kill“$FIRST”命令似乎不起作用,在退出脚本后,在控制台上键入htop,该进程仍然处于活动状态。 另外,如果我直接在控制台上键入sudo kill#pid,该命令将起作用并终止进程 #!/bin/bash sudo python3 main.py & sleep 5 pidlist=$(pidof
#!/bin/bash
sudo python3 main.py &
sleep 5
pidlist=$(pidof python3 main.py)
echo "$pidlist"
read FIRST __ <<< "$pidlist"
echo "$FIRST"
mem=$(ps -p "$FIRST" -o %mem)
echo "$mem"
set -- $mem
memory="$2"
while true;
do
sleep 2
echo "$memory"
if (( $(echo "${memory} > 20.0" | bc) )); then
echo "killing process"
sudo kill "$FIRST"
break
fi
sleep 2
done
把一些东西放在条件句中。
if
语法需要有一个主体。是的,实际上里面有一些内容,如果,对不起,我更正了帖子。你考虑过这些答案吗?即使您使用sudo kill-9“$FIRST”
,脚本是否也无法杀死它?@james那么我猜这个过程第一次试图处理SIGTERM
,时间太长或者卡住了,所以您的手册kill
后来中断了它。最好的做法是先杀死TERM
(又名杀死
),等待适当的秒数让它有机会正常关机,然后-杀死
(又名-9
)如果它还没有死
+ mem='%MEM
25.5'
+ echo '%MEM
25.5'
%MEM
25.5
+ set -- %MEM 25.5
+ memory=25.5
+ true
+ sleep 2
+ echo 25.5
25.5
++ bc
++ echo '25.5 > 20.0'
+ (( 1 ))
+ echo 'killing process'
killing process
+ sudo kill 2247
+ break