web-dev-qa-db-ja.com

bash flock:なぜ200なのか?

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

「200」の意味を誰かに説明してもらえれば幸いです。

私はflockについて読みましたが、ファイル記述子を指定する場合は200のようですが、この数の何が良いのでしょうか。

31
Subway

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

コメントでは、以下について質問します。

( 
  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コマンド)では、ロックはそのサブシェルによって保持され、他のユーザーはそのロックを取得できません。サブシェルが完了すると、ファイルが閉じてロックが解放されます。

43
Brian Campbell