2016-06-29 5 views
3

RedHat daemon function usageのフォローアップです。受け入れられた解決策では、[機能] daemon [/etc/rc.d/init.d/functionsからの発信]を使用しているときには、 "$!は使用できません。だから私の追随する質問は、PIDを取得することです。RHELの `daemon` init.d関数を使用する場合、どのようにPIDをキャプチャしますか?

/etc/rc.d/init.d/functionsから入手したdaemonの機能を使用する場合は、どのようにPIDをキャプチャしますか?

答えて

2

あなたは背景プログラムラッパーシェルスクリプトを作成し、$!を使用してPIDをキャプチャして、daemon関数にラッパーシェルスクリプトを渡す必要があります。

はは/etc/rc.d/init.d/functionsからソース関数daemonを使用せずにプログラムをデーモン化するために、よりエレガントな方法があるかもしれませんが、この質問/回答はこのdaemon機能の使用方法についての具体的です。 [2]


をここに理由をステップにより、低レベルのステップです:

私はあなたは、/ etcからソース関数daemonを使用してデーモン化したい任意のプログラムのための代役として、[1] sleepを使用しなければなりません/rc.d/init.d/functions。

sleepを背景とし、$!でPIDを取得するラッパーシェルスクリプトを作成する必要があります。だから、例えば、あなたのsleep_wrapper.shは次のようになります。

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

次にあなたが経由daemonに、このラッパーを渡す:あなたは単純あなたがのPIDを取得することはできませんPID=$!によってdaemon sleep 100が続い呼び出そう

daemon sleep_wrapper.sh 

プロセスsleep代わり:

  • あなたはrunuser
  • のためのPIDを取得します bashプロセス
  • が最終的にbashsleep

を生成しますスポーン

  • runuser [1] ほとんどのバイナリのアプリケーションはバックグラウンド自身とそのsleepは、この例のために良い代役ではありません。明らかにこれをあなたの状況に適応させるには、sleepをあなたが使いたいプログラムに置き換えます。

    [2] この特定のデーモン機能を使用しないでデーモンを行うより良い方法があるはずです。

  • +0

    これは明らかではありませんか?本当にQ&Aが必要ですか? – 123

    +1

    @ 123あなたのプロフィールを覗いてみると、あなたはbashをよく経験しているようです。しかし、私にとってこれは間違いではありません。私が初めてこの機能を使用したとき、私は自分自身を間違って使いました。だから私は他の人に同じ問題を抱かせたくありません。(さらに、ほとんど存在しないドキュメントがあり、googleやstackoverflowで見つけた情報は通常、別の 'デーモン'について語っているので、純粋なgooglerはその情報をRedhatの/etc/rc.d/initのこの特定の 'デーモン' .d/functions。) –

    +0

    ええと、十分に:) – 123

    関連する問題