Eine Lösung, die keine zusätzlichen Tools erfordert, wäre vorzuziehen.
Akzeptierte Antwort:
Fast wie die Antwort von nsg:Verwenden Sie ein Sperr-Verzeichnis . Die Verzeichniserstellung ist unter Linux und Unix und *BSD und vielen anderen Betriebssystemen atomar.
if mkdir $LOCKDIR
then
# Do important, exclusive stuff
if rmdir $LOCKDIR
then
echo "Victory is mine"
else
echo "Could not remove lock dir" >&2
fi
else
# Handle error condition
...
fi
Sie können die PID des sperrenden sh zu Debugging-Zwecken in eine Datei im lock-Verzeichnis einfügen, aber tappen Sie nicht in die Falle, dass Sie diese PID überprüfen können, um zu sehen, ob der Sperrprozess noch ausgeführt wird. Viele Rennbedingungen legen diesen Weg fest.