追加のツールを必要としないソリューションが好まれます。
承認された回答:
nsgの答えとほぼ同じです。ロックディレクトリを使用します 。ディレクトリの作成は、Linux、UNIX、* BSD、およびその他の多くのOSではアトミックです。
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
デバッグの目的で、ロックshのPIDをlockディレクトリ内のファイルに入れることができますが、そのPIDをチェックして、ロックプロセスがまだ実行されているかどうかを確認できるという考えに陥らないでください。多くの競合状態がその経路にあります。