3

これは、 RedHatdaemon関数の使用法のフォローアップです。承認された解決策では、著者は「$![関数] daemon[/etc/rc.d/init.d/functions から入手] を使用する場合は使用できません」と述べています。したがって、私のフォローアップの質問は、PID の取得に関するものです。

daemon/etc/rc.d/init.d/functions から取得した関数を使用する場合、どのように PID を取得しますか?

4

1 に答える 1

2

プログラムをバックグラウンドで実行し、使用して PID をキャプチャするラッパー シェル スクリプトを作成し、ラッパーシェル スクリプトを関数$!に渡す必要があり ます。daemon

/etc/rc.d/init.d/functions から供給される関数を使用せずにプログラムをデーモン化するより洗練された方法があるかもしれませんdaemonが、この質問/回答はこのdaemon関数の使用に固有のものです。[2]


理由の低レベルのステップバイステップは次のとおりです。

sleep[1] は、/etc/rc.d/init.d/functions から取得した関数を使用してデーモン化するプログラムの代用として使用しますdaemon

sleepバックグラウンドで を介して PID を取得するラッパー シェル スクリプトを作成する必要があります$!。たとえば、次のsleep_wrapper.shようになります。

#!/bin/bash
sleep 100 &
PID=$!
echo $PID

次に、このラッパーを次のように渡しますdaemon

daemon sleep_wrapper.sh

単純に呼び出そうとすると、プロセスの PID は取得daemon sleep 100されPID=$!ませんがsleep、代わりに次のようになります。

  • あなたはPIDを取得しますrunuser
  • runuserbashプロセスを生成する
  • ついにbash産卵sleep

[1] ほとんどのバイナリ アプリケーションはバックグラウンド処理を行わないsleepため、この例の代用として適しています。明らかに、これを状況に適応させるにsleepは、使用したいプログラムに置き換えます。

[2] この特定のデーモン機能を使わずにデーモン化するためのより良い方法があるはずです。

于 2016-06-29T14:53:12.093 に答える