짧은 간격으로 여러 번 호출 될 수있는 스크립트 (show_volume.sh)를 작성하고 있습니다. 이 스크립트의 인스턴스가 하나 이상 실행 중인지 여부를 확인하는 방법이 필요합니다. 나는 ps
를 사용할 수있는 생각, 그래서 나는 배쉬에서이 기능을 썼다 : ps를 사용하여 실행중인 스크립트 수를 확인하십시오.
is_only_process(){
PCOUNT=`ps -a | grep show_volume.sh | wc -l`
echo $PCOUNT
if ((PCOUNT==1)); then
return 1
fi
return 0
}
그래서 내가 추가 한 다음 2 줄
is_only_process
sleep 4
을 한 번이 스크립트를 시작했지만, echo $PCOUNT
의 출력이 어떤을하지 않습니다 나 한테 감각이있어. 나는 항상 예상대로 2가 아니라 1을 얻는다. 스크립트가 실행되는 동안 나는 다른 터미널에서이 명령
ps -a | grep show_volume.sh | wc -l
을 실행할 때, 나는 1 그것의 거의 같은 내가 행에서이 스크립트를 여러 번 실행할 때, 예를 들어, 값을받을 for 루프를 사용하여 10 번. 스크립트 자체가 너무 높은 값을 결정하는 동안 다른 터미널을 사용할 때 올바른 값을받습니다.
이제이 스크립트가이 홀수 값을 결정하는 이유는 무엇입니까?
@ Nathan +1 멋진 트릭! – khachik
"ps가 프로세스 grep show_volume.sh도 실행 중일 때 - 기술적으로 올바르지 않습니다. grep이 실행되기 전에'ps'가 종료되는 경우가 있는데,이 경우'grep '은 계산되지 않습니다. 그래서 두 가지 경우 모두를 만족시켜야합니다. – marcog
웬일인지, 그것은 나의 문제를 해결하지 않는다.표현식을'pgrep show_volume.sh | wc -l' 또는'ps -a | grep s [h] ow_volume.sh | wc -l'하지만 스크립트는 이전과 똑같이 작동합니다. – helios35