Sería preferible una solución que no requiera herramientas adicionales.
Respuesta aceptada:
Casi como la respuesta de nsg:use un directorio de bloqueo . La creación de directorios es atómica en Linux, Unix, *BSD y muchos otros sistemas operativos.
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
Puede colocar el PID del sh de bloqueo en un archivo en el directorio de bloqueo con fines de depuración, pero no caiga en la trampa de pensar que puede verificar ese PID para ver si el proceso de bloqueo aún se ejecuta. Muchas condiciones de carrera se encuentran en ese camino.