![有时无法测试特定进程是否正在运行](https://linux22.com/image/144803/%E6%9C%89%E6%97%B6%E6%97%A0%E6%B3%95%E6%B5%8B%E8%AF%95%E7%89%B9%E5%AE%9A%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C.png)
我不明白为什么我的剧本有时,无法识别我的 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
- ps 有
-C
选项,无需 grep killall -0 firefox-bin
将通过退出代码告诉您 firefox-bin 进程是否存在。无需原始管道和重定向。- 只需删除您的
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
输出。