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)。解決策は良い妥協かもしれません。

おすすめ記事