web-dev-qa-db-ja.com

flockがロックファイルをクリーンアップしないのはなぜですか?

処理が完了した後、ロックファイルが削除されていません。 flockがファイルを保持する理由はありますか?また、flockは、取得されたロックがあるかどうかをどのようにして知るのですか?

これはcrontabファイルの例です

* * * * * flock python <script_name>.py
11
wayfare

flockのほとんどの使用例では、ロックファイルnotを「クリーンアップ」することが非常に重要です。それ以外の場合は、次のシナリオを想像してください。

  • プロセスAはロックファイルを開き、それが存在しないことを検出して作成します。
  • プロセスAがロックを取得する
  • プロセスBがロックを開きます(すでに存在していることがわかります)
  • プロセスBはロックを取得しようとしますが、待機する必要があります
  • プロセスAがロックを解放します
  • プロセスBは即座にロックを取得します
  • プロセスAがロックファイルを削除する
  • プロセスCはロックファイルを開き、存在しないことを確認して、新しいロックファイルを作成します。プロセスBがロックしたdifferentロックファイルを開いたままにしていることに注意してください。
  • プロセスCはロックを取得しようとして成功します...しかし、プロセスBはまだロックファイルを開いてロックしているため、待機する必要がありました。
14
Celada