왜 내 스크립트를 이해하지 못합니까?때때로, 내 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
이렇게 하면 출력을 구문 분석하려는 시도가 제거됩니다 .