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

デーモンプロセスが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を与えたらどうでしょうか?
デーモンがその識別子を持つことを期待し、他のプログラムがそのpidを使用していると混乱を引き起こす他のプログラム(rsyslogなど)がありますか?

答え1

多くのデーモンと同様に、デーモンインスタンスはいつでもシステム上で1つだけ実行する必要があります。このユースケースでは、デーモンは通常、DIDが実行中であることを示すためによく知られているディレクトリ(Linuxの場合はcurrent /run、Previous)にPIDを格納します。/var/run

これらのデーモンの2番目のインスタンスを呼び出そうとすると、新しく呼び出されたデーモンは既存のエントリを確認し(このエントリをロックファイルとして扱い)、検出すると終了/runします。

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

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

関連情報