PIDおよびロックファイルとは何ですか?


75

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

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

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

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

回答:


86

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

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

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

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

これは、すべてのUNIXライクなオペレーティングシステムのファイルシステムがシリアル化を実施するために機能します。つまり、ファイルシステムへの変更は常に1回だけです。データベースなどと同様のロックの並べ替え。


1
ロックファイルが手動で削除されない限り、これは正しいです。VMWare Playerはこの動作を示します。たとえば、VMWare Playerがクラッシュした場合.lck、VMのディレクトリ内のファイルを削除する必要があります。削除しないと、起動しようとしたときに使用中であることがわかります。
ローレンス

1
Windowsはどうですか?.lockファイルはどのように処理されますか?結局のところ、それはUnixライクではありません。
サラホフガイア

2
Windowsプログラムがこのように機能することは一般的ではないと思います。私が見たこの動作を持つ唯一のプログラムは、Unix / Linuxからの
移植-HaMster

2
LawrenceC、Re " 存在しない場合、リソースを「取得」したいプログラムはファイルを作成します "; しかし、そのような同期を行うために特別に構築された適切な関数があります。「ファイルハック」を使用する代わりに、これらの機能に依存しないのはなぜですか?
Pacerier

1
@Pacerier-Unix / Linuxシェルは他の同期プリミティブと比べてファイルシステムと非常に簡単にやり取りするため、この方法でロックファイルを使用するのは、シェルスクリプトやシェルスクリプトとやり取りするプログラムなどです。また、ファイルは異なるプロセスにまたがって持続します。高性能のプログラムは、おそらく、内部OSを同期するために、ネイティブOSプリミティブをファイルに対して、またはシェルではない他のプロセスに対してもおそらく明らかにするでしょう。
ローレンス

14

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


+1ロックファイルとpidファイルの両方を使用することの説明。
カイルクルル

@Caleb-PIDファイルとロックファイルの両方が使用される理由を説明してください。PIDファイルで十分だと思われます。PIDファイルが存在する場合、PIDをチェックしてプロセスが実行されているかどうかを確認できます。ロックファイルのチェック、PIDファイルのチェック、およびプロセスの存在の確認よりも少ない手順で済みます。
MVaughan

@MVaughan他に何もない場合、競合状態を回避します。一部のアプリは、まだPIDを必要としているが、ロックを放棄できる場合に使用します。しかし、より基本的なレベルでは、両方の操作で1つのファイルをオーバーロードすると、クラッシュなどの障害が発生し、システムに一貫性のない状態が残ります。
カレブ

8

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.