5

rc5.d に保存されたスクリプト ファイルを介してバイナリ (C++ で記述) を実行することにより、サービス デーモンを開始しました。

しかし、デーモン プロセスの pid を取得して /var/run/.pid の pid ファイルに保存する方法がわかりません。終了にpidを使用できるように。これどうやってするの?

4

3 に答える 3

8

initスクリプトの引数で使用start-stop-daemon(8)してみてください。--pidfileプログラムにPIDを指定された場所(通常は構成ファイルで決定されます)に書き込んでもらいます。

注意しなければならないのは、たとえば、再起動後もロックファイルが持続した場合の古いPIDファイルです。そのロジックは、initスクリプト自体に実装するのが最適であるため、--execオプションを使用できますstart-stop-daemon

たとえば、がサービスであり、サービスではない場合/var/run/foo.pid1234ロック/proc/1234/exeファイルは古くなっているため、静かに削除して、サービスを正常に開始できるようにする必要があります。

アプリケーションに関する限り、ロックファイルの場所が構成可能であることを確認してください。また、initスクリプトにロックファイルを配置する場所を指示する手段がいくつかあります。

例:(サンプル:/ etc / default / foo):

PIDFILE=/var/run/foo.pid
OTHEROPTION=foo

次に、/ etc / init.d / fooにあります:

[ -f /etc/default/foo ] && . /etc/default/foo

繰り返しになりますが、一貫してファイルに書き込む以外に、このロジックはすべてアプリケーションの外部で処理する必要があります。

于 2010-04-29T08:57:12.580 に答える
1

プログラムが開いているポートがわかっている場合は、fuserコマンドを使用してpidを判別します。

于 2010-04-29T09:02:55.993 に答える
1

あなたは複数の方法について行くことができます:

  1. プログラムでgetpidを使用して、構成可能なファイルに書き込みます(おそらく、ENVを調べます)。
  2. $を使用してください!プログラムを開始した後(これはarchlinuxでは機能しません:-?)
  3. プログラムを開始した後、pidofを使用します
于 2010-04-29T09:05:13.820 に答える