Forums Neueste Beiträge
 

Wo ist mein Denkfehler?

30/11/2007 - 09:53 von Burkhard Schultheis | Report spam
Ich möchte in einem Skript verhindern, dass es ein zweites Mal
gleichzeitig làuft. Dazu habe ich einen Test mit dem folgenden Skript
durchgeführt:

#!/bin/sh
while true
do
ps -ef | grep $0 | grep -v $$
anz=`ps -ef | grep $0 | grep -v $$ | wc -l`
echo $anz
sleep 2
done

Das liefert mir aber mal eine 0 und mal eine 1, nicht ganz streng
alternierend (auf SuSE 10.1). Wieso? Das 'ps -ef | grep $0' dürfte doch
nur sàmtliche Prozesse liefern, die mit dieser Inkarnation des Skripts
zu tun haben. Und die müssten doch alle mit dem 'grep -v $$'
ausgefiltert werden, so dass wc immer eine 0 liefern müsste.

Wo ist mein Denkfehler?

Grüße,
Burkhard
A: Weil es die Lesbarkeit des Textes verschlechtert.
F: Warum ist TOFU so schlimm?
A: TOFU
F: Was ist das größte Ärgernis im Usenet?
 

Lesen sie die antworten

#1 Paul Hink
30/11/2007 - 09:58 | Warnen spam
Burkhard Schultheis wrote:

anz=`ps -ef | grep $0 | grep -v $$ | wc -l`

[...]

Das liefert mir aber mal eine 0 und mal eine 1, nicht ganz streng
alternierend (auf SuSE 10.1). Wieso? Das 'ps -ef | grep $0' dürfte
doch nur sàmtliche Prozesse liefern, die mit dieser Inkarnation des
Skripts zu tun haben. Und die müssten doch alle mit dem 'grep -v $$'
ausgefiltert werden, so dass wc immer eine 0 liefern müsste.



`ps -ef` listet manchmal auch das `grep $0` mit auf. Und dieses grep
hat eine eigene Process-ID, nicht $$ (die Process-ID der Shell), so
dass das zweite grep das erste nicht ausfiltert.

Ähnliche fragen