システム内/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を使用していると混乱するでしょうか?
多くのデーモンでは、システムで一度に実行できるデーモンのインスタンスは1つだけです。この使用例では、デーモンは通常、PIDを既知のディレクトリ(Linuxでは現在/run
、以前は/var/run
)に格納して、デーモンのインスタンスが実行中であることを示します。
そのようなデーモンの2番目のインスタンスを呼び出そうとすると、新しく呼び出されたデーモンは/run
の下にある既存のエントリ(ロックファイルと考える)をチェックし、見つかった場合は終了します。
デーモンが再起動すると、新しいインスタンスのPIDがファイルに書き込まれます。新しいインスタンスは独自のPIDを取得します。特定のPIDでプロセスを起動する方法はありません。
PIDファイルは、デーモンを停止するために強制終了するプロセスを決定するためにも使用されます。