36

そのスレッドについて: bash flock:ロックを取得できない場合は終了します

誰かが「200」の意味を説明してくれたら幸いです。

私は群れについて読んだことがあり、ファイル記述子を指定する場合は200のようですが、この数の何がそれほど良いのでしょうか。

4

1 に答える 1

59

番号200については、特別なことは何もありません。これは、flockコマンドのマニュアルページで使用されている例にすぎません。たまたま多数あるため、スクリプト中に開いた他のファイルのファイル記述子と競合する可能性はほとんどありません。

あなたのコメントでは、あなたはについて尋ねます:

( 
  flock -e 200
  echo "In critical section"
  sleep 5 
) 200>/tmp/blah.lockfile 
echo "After critical section"

括弧()はサブシェルを作成します。親プロセスとは別の新しいプロセス。その200>/tmp/blah.lockfileプロセスが/tmp/blah.lockfileファイル記述子200に書き込み可能になります。括弧内のコマンドは、そのシェル内で実行されます。

flock -e 200ファイル記述子200が指すファイルの排他的ロックを取得します。排他的ロックとは、排他的または共有のいずれかでそのファイルのロックを取得しようとする他のユーザーが、このロックが解放されるか失敗するまでブロック(待機)することを意味します。タイムアウトになった場合、またはブロックしないように求められた場合。したがって、サブシェルの本体の残りの部分(echoおよびsleepコマンド)の間、ロックはそのサブシェルによって保持され、他の誰もそのロックを取得できません。サブシェルが終了すると、ファイルは閉じられ、ロックが解除されます。

于 2012-11-25T14:23:47.773 に答える