したがって、UNIX の世界でクロスプロセス ロックが必要な場合の友は、 と呼ばれるコマンドflock
です。これは OS レベルでのアトミック操作として実装されており、この種の作業に非常に役立ちます。詳細については、こちらをご覧ください。使用方法は次のとおりです。
# Wait for lock on (fd 222) for 10 seconds
(flock -w 10 222 || exit 1
{
# Do the operations you want to here
}) 222>/path/to/lockfile
ここにはいくつかのトリックがあります。まず、通常、出力リダイレクトを使用する場合、bash は群れを試みる前にファイルを開きます。ただし、ここでは、()
bash が最初のコマンドが flock であるサブシェルを最初に開始するためです。flock は、ファイル ハンドル 222 でロックを取得しようとします。次に、flock はファイル記述子をロックします。ファイル記述子をロックした後、 のコード{}
が実行されます。それが実行された後、ファイル記述子222の内容がロックファイルに書き込まれ(すなわち何もない)、ファイルが閉じられ、ロックが解放される。これは、ファイルを閉じるとロックが解除される C に似ています。もちろん、ここで何が起こっているのかを説明している著名な @CharlesDuffy (帽子のヒント @codeforester) よりも優れた説明はありません。