PIDとロックファイルは何に使用されますか?

PIDとロックファイルは何に使用されますか?

私はしばしばpidとlockファイルを指定するプログラムを見る。私は彼らが何をしているのかよくわかりません。

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

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

誰かがこれを説明できますか?

答え1

pidファイルは、一部のプログラムで起動時にプロセスIDを記録するために作成されます。これはさまざまな目的に使用されます。

  • これは、この特定のプログラムが実行中であるか、少なくとも正常に開始されたことをシステムの他のプロセスおよびユーザーに送信する信号です。
  • これにより、非常に簡単なスクリプトを作成して実行していることを確認し、kill終了したいときに簡単なコマンドを実行できます。
  • これは、プログラムが以前に実行されていたインスタンスが正常に終了していないことを確認する手頃な方法です。

もちろん、単にpidファイルが存在しても特定のプロセスIDが実行されているという保証はありません。プロセステーブルに特定のPIDが存在するかどうかを確認することは、UNIXと同様のオペレーティングシステムでは正確に移植できません。ただし、そのユーティリティに依存したくない場合は、おそらくすべてのインスタンスで呼び出したくpsありません(一部のUNIX - とにかく他の方法で実装されているオペレーティングシステムと同じですps)。

ファイルロックの概念は次のとおりです。意図は、2つの(うまく動作する)別々のプログラムインスタンス(おそらくシステムで同時に実行される)が他のコンテンツに同時にアクセスしないようにすることです。プログラムがリソースにアクセスする前にロックファイルが存在するかどうかを確認し、ロックファイルがある場合はエラーが出力されるか消えるまで待つのがアイデアです。ファイルが存在しない場合、リソースを「インポートする」プログラムがファイルを生成し、後で会うことができる他のインスタンスは、プロセスが完了するのを待ちます。もちろん、これはロックを「取得」したプログラムが実際にロックを解除し、ロックファイルを削除することを忘れていないと仮定します。

これは、すべてのUNIXファミリオペレーティングシステムのファイルシステムが強制的に実行されるために可能です。直列化つまり、ファイルシステムへの変更は、特定の時間に実際に一度だけ発生することを意味します。データベースロックなどに似ています。

オペレーティング・システムまたはランタイム・プラットフォームは一般に同期基本要素を提供し、これらの基本要素を使用することは一般的により良い決定である。呼び出しを抽象化するための信頼できるライブラリなしで、過去や将来のさまざまなオペレーティングシステムで実行するように設計されたものを作成するなどの状況がある可能性があります(たとえば、さまざまなUNIXバージョンで動作するように設計された可能なスクリプトまたはベースのshスクリプトbash)。解決策は良い妥協かもしれません。

答え2

これらのファイルは通常、システムで一度だけ実行できるデーモンによって使用されます。 PIDファイルには通常、起動して実行されているプログラムのプロセスID番号が含まれています。また、起動時にロックファイルを生成します。ロック・ファイルが存在する限り、ユーザーの介入がなければ、他のロック・ファイルは開始されません。ロックファイルが存在し、pidファイルに記載されているプロセスIDが実行されていない場合、デーモンは「死んだ」状態にあると見なされます。つまり、実行中でなければなりませんが、競合や不適切なシャットダウンによるものではない可能性があります。これにより、一部のプログラムの特別な起動/再起動シナリオが開始される可能性があります。正しく閉じると、ロックファイルが削除されます。

答え3

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

ロックファイルはアプリケーションごとに異なる可能性があります。ロックファイルは、特定のリソースが使用中であり、アクセスを希望するプロセスが続行する前にリソースが解放されるのを待つ必要があることを示すために使用されます。

関連情報