Ich schreibe ein Skript (show_volume.sh), die mehrmals in kurzen Intervallen aufgerufen werden kann. Ich muss herausfinden, ob es mehr als nur eine Instanz dieses Skripts gibt. Ich dachte, ich ps
verwenden konnte, so schrieb ich diese Funktion in Bash:Überprüfen Sie die Anzahl der laufenden Skripte mit ps
is_only_process(){
PCOUNT=`ps -a | grep show_volume.sh | wc -l`
echo $PCOUNT
if ((PCOUNT==1)); then
return 1
fi
return 0
}
So habe ich diese 2 Zeilen
is_only_process
sleep 4
und begann, sobald dieses Skript, aber die Ausgabe von echo $PCOUNT
nicht jeder machen Sinn für mich. Ich bekomme immer den Wert 2, nicht 1, wie erwartet. Wenn ich diesen Befehl ausführen
ps -a | grep show_volume.sh | wc -l
von einem anderen Endgerät, während das Skript ausgeführt wird, erhalte ich den Wert 1. Es ist so ziemlich das gleiche, wenn ich dieses Skript mehrmals in einer Reihe, z.B. 10 mal mit einer for-Schleife. Das Skript selbst bestimmt Werte, die zu hoch sind, während ich bei Verwendung eines anderen Terminals korrekte Werte erhalte.
Nun, warum bestimmt dieses Skript diese ungeraden Werte?
@Nathan +1 schöner Trick! – khachik
"Im Moment ps läuft ein Prozess grep show_volume.sh läuft auch" - nicht technisch korrekt. Es gibt Fälle, in denen 'ps' beendet wird, bevor' grep' hochfährt, in diesem Fall wird 'grep' nicht gezählt. Sie müssen also für beide Fälle sorgen. – marcog
Aus irgendeinem Grund löst es mein Problem nicht.Ich habe versucht, den Ausdruck durch 'pgrep show_volume.sh | zu ersetzen wc -l' oder 'ps-a | grep s [h] ow_volume.sh | wc -l, aber das Skript verhält sich genau so wie zuvor. – helios35