だから、クロスプロセスロックを望むことflock
と呼ばれるコマンドがあるUnixの世界ではあなたの友人。これはOSレベルでアトミックな操作として実装されており、この種の作業には非常に便利です。 more about it hereを読むことができます。ここでは、あなたがそれを使用する方法である。
# 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はフロックを試す前にファイルを最初に開きます。しかし、ここでは、()
があるので、最初のコマンドが群を取るサブシェルを最初に開始します。 flockは、ファイルハンドル222上のロックを取得しようとする。Flockはファイル記述子をロックする。ファイル記述子をロックした後、{}
のコードが実行されます。それが実行された後、ファイル記述子222の内容がロックファイルに書き込まれ(すなわち何もない)、ファイルが閉じられ、ロックが解除される。これは、ファイルを閉じるとロックを解除するCのようなものです。もちろん、何が起こっているのかをhereについて説明している有名な@CharlesDuffy(帽子の先端@codeforester)よりも上手く説明することはできません。
出典
2016-12-22 05:01:00
2ps
いいですが、アドホックすぎます。それを行う既存のコマンドがあるようです:flock – dangonfast
@delavnog:私は実装のためにシンボリックリンクを使ってロックを見ました。しかし、私は群れが良いことに同意する。 – codeforester