有时无法测试特定进程是否正在运行

有时无法测试特定进程是否正在运行

我不明白为什么我的剧本有时,无法识别我的 Firefox 是否正在运行。分析标准输出我可以说,if ps cax | grep firefox > /dev/null即使我的 Firefox 正在运行,有时也会跳过此条件 ( )。

目前使用 Xubuntu 18.10 Livecd

该脚本在启动时调用。

#!/bin/bash 

[[ -f /home/xubuntu/controle_memoria.lock ]] && exit 1
> /home/xubuntu/controle_memoria.lock

while true ; do 
free=`free -m | grep Mem | awk '{print $4}'`
if [ "$free" -gt 0 ]
 then
    if [ $free -le 120 ]; #When my memory consuptiom goes below 120MB do the commands below. 
     then

if ps cax | grep firefox > /dev/null
then
        sudo killall -9 firefox-bin         
        firefox &> /dev/null &

else
    echo "Stopped"
fi

        sudo sysctl -w vm.drop_caches=3
        sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 



    fi
fi & sleep 1; done

答案1

  1. ps 有-C选项,无需 grep
  2. killall -0 firefox-bin将通过退出代码告诉您 firefox-bin 进程是否存在。无需原始管道和重定向。
  3. 只需删除您的if ps并离开即可killall -9 firefox-bin && firefox-bin &> /dev/null &。因此,如果进程不被终止,它就不会启动。

答案2

如果你if ps用以下内容替换你的块会发生什么

for proc in /proc/*
do
    if [[ $(readlink -f ${proc}/exe) = "/usr/bin/firefox-bin" ]]
        sudo killall -9 firefox-bin
        firefox &> /dev/null &
    else
        echo "Stopped"
    fi
done

这消除了尝试解析ps输出。

相关内容