web-dev-qa-db-ja.com

pidファイルとロックファイルの目的は何ですか?

プログラムがpidファイルとロックファイルを指定していることがよくあります。そして、私は彼らが何をするのかよくわかりません。

たとえば、nginxをコンパイルする場合:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

誰かがこれに光を当てることはできますか?

80
Stann

pidファイルは、起動時にプロセスIDを記録するために一部のプログラムによって書き込まれます。これには複数の目的があります。

  • これは、その特定のプログラムが実行されている、または少なくとも正常に起動したことを他のプロセスやシステムのユーザーに知らせる信号です。
  • これにより、実行中かどうかを簡単に確認できるスクリプトを記述し、終了する場合は単純なkillコマンドを発行できます。
  • これは、プログラムの以前に実行中のインスタンスが正常に終了しなかったかどうかを確認するための安価な方法です。

もちろん、pidファイルが存在するだけでは、その特定のプロセスIDが実行されていることは保証されません。そのため、このメソッドは100%確実ではありませんが、多くの場合「十分」です。特定のPIDがプロセステーブルに存在するかどうかを確認することは、psユーティリティに依存する必要がない限り、UNIXライクなオペレーティングシステム全体で完全に移植可能ではありません。一部のUNIXライクなオペレーティングシステムでは、psの実装方法が異なります)。

ロックファイルはプログラムによって使用され、1つのシステムで同時に実行されているプログラムの2つの(適切に動作する)個別のインスタンスが同時に他のものにアクセスしないようにします。このアイデアは、プログラムがリソースにアクセスする前に、ロックファイルの存在をチェックし、ロックファイルが存在する場合は、エラーが発生するか、なくなるまで待ちます。ファイルが存在しない場合、リソースを「取得」しようとするプログラムがファイルを作成し、後で出くわす可能性のある他のインスタンスは、このプロセスが実行されるのを待ちます。もちろん、これはロックを「取得」するプログラムが実際にロックを解放し、ロックファイルを削除することを忘れないことを前提としています。

これは、すべてのUNIXライクなオペレーティングシステムでのファイルシステムがserializationを強制するため機能します。データベースのようなロックのようなものです。

90
LawrenceC

これらのファイルは多くの場合、システムで1回だけ実行する必要があるデーモンによって使用されます。 PIDファイルには通常、既に起動されて実行中のプログラムのプロセスID番号が含まれています(存在する場合)。また、起動時にロックファイルを作成します。ロックファイルが存在する限り、ユーザーの介入なしに別のロックファイルが開始されることはありません。ロックファイルが存在し、pidファイルに記述されているプロセスIDが実行されていない場合、デーモンは「デッド」状態であると見なされます。つまり、デーモンは実行されているはずですが、おそらくクラッシュまたは不適切なシャットダウンが原因ではありません。 。これにより、一部のプログラムの特別な起動/再起動シナリオが開始される場合があります。適切にシャットダウンすると、ロックファイルが削除されます。

14
Caleb

PIDファイルには、実行中のプロセスのプロセスIDが含まれます。これにはさまざまな用途があります。それを読んで、プロセスがまだ実行中であることを確認して適切なアクションを実行するか、それを読んでプロセスを強制終了することができます。

ロックファイルは、ほとんどの場合アプリケーション固有です。ロックファイルは、一部のリソースが使用中であり、アクセスを必要とするプロセスがリソースが解放されるまで待機してから続行することを示すために使用されます。

8
user591