Sarebbe preferibile una soluzione che non richieda strumenti aggiuntivi.
Risposta accettata:
Quasi come la risposta di nsg:usa una directory di blocco . La creazione di directory è atomica sotto Linux e Unix e *BSD e molti altri sistemi operativi.
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
Puoi inserire il PID del blocco sh in un file nella directory di blocco per scopi di debug, ma non cadere nella trappola di pensare di poter controllare quel PID per vedere se il processo di blocco è ancora in esecuzione. Molte condizioni di gara giacciono su quel percorso.