なぜ私のスクリプトを理解していないのですか?時々、私の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
これにより、出力を解析する試みがなくなります。