web-dev-qa-db-ja.com

デーモンがPID(プロセスID)をファイルに保存するのはなぜですか?

システム内/runディレクトリ*.pid拡張機能。実行中のデーモンのプロセスIDを保存します。

% ls -1 /run/*.pid                    
acpid.pid
crond.pid
dhclient-wlp2s0.pid
irqbalance.pid
lightdm.pid
nginx.pid
rsyslogd.pid

そして、私はこれが他の多くのデーモンが行うことであり、そのデーモン管理スクリプトが/etc/init.d/*は、最後に実行中のインスタンスからpidを読み取り、新しいインスタンスを開始するときにそれを再利用します。
なぜ?なぜデーモンを起動して新しいpidを与えないのですか?
他のプログラムがありますか。 rsyslog、そのデーモンがその識別子を持つことを期待していて、別のプログラムがそのpidを使用していると混乱するでしょうか?

5
the_velour_fog

多くのデーモンでは、システムで一度に実行できるデーモンのインスタンスは1つだけです。この使用例では、デーモンは通常、PIDを既知のディレクトリ(Linuxでは現在/run、以前は/var/run)に格納して、デーモンのインスタンスが実行中であることを示します。

そのようなデーモンの2番目のインスタンスを呼び出そうとすると、新しく呼び出されたデーモンは/runの下にある既存のエントリ(ロックファイルと考える)をチェックし、見つかった場合は終了します。

デーモンが再起動すると、新しいインスタンスのPIDがファイルに書き込まれます。新しいインスタンスは独自のPIDを取得します。特定のPIDでプロセスを起動する方法はありません。

PIDファイルは、デーモンを停止するために強制終了するプロセスを決定するためにも使用されます。

11
fpmurphy