これは、 RedHatdaemon
関数の使用法のフォローアップです。承認された解決策では、著者は「$!
[関数] daemon
[/etc/rc.d/init.d/functions から入手] を使用する場合は使用できません」と述べています。したがって、私のフォローアップの質問は、PID の取得に関するものです。
daemon
/etc/rc.d/init.d/functions から取得した関数を使用する場合、どのように PID を取得しますか?
プログラムをバックグラウンドで実行し、使用して 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
、代わりに次のようになります。
runuser
runuser
bash
プロセスを生成するbash
産卵sleep
[1] ほとんどのバイナリ アプリケーションはバックグラウンド処理を行わないsleep
ため、この例の代用として適しています。明らかに、これを状況に適応させるにsleep
は、使用したいプログラムに置き換えます。
[2] この特定のデーモン機能を使わずにデーモン化するためのより良い方法があるはずです。