Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于监视进程的bash脚本';s内存使用率并杀死它_Bash_Unix_Memory Management - Fatal编程技术网

用于监视进程的bash脚本';s内存使用率并杀死它

用于监视进程的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

我正在寻找一个bash脚本,它允许我在后台启动一个进程,比如每10分钟监控一次它的内存消耗,如果超过某个值,就杀死它

编辑 我可以正确地获取我想要终止的进程的正确pid,但是sudo kill“$FIRST”命令似乎不起作用,在退出脚本后,在控制台上键入htop,该进程仍然处于活动状态。 另外,如果我直接在控制台上键入sudo kill#pid,该命令将起作用并终止进程

#!/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