森下徹
moris****@nttco*****
2009年 10月 19日 (月) 19:52:58 JST
立石様 森下です。お疲れ様です。 > もしかして、「l7vsd の一番親のプロセスが(誰が実行するかわからな > い)l7vsadm からの接続を待ち、接続があったら終了する(制御を呼び出 > し側に戻す)」と受け取られていますか? そのとおり受け取ってしまいました。。。 説明ありがとうございます。 自分で発行するのですね。了解です。 TATEISHI Katsuyuki さんは書きました: > 立石です。 > > From: 森下徹 <moris****@nttco*****> > Subject: Re: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち > Date: Mon, 19 Oct 2009 19:06:10 +0900 > >>> 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 >>> 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで >>> exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 >>> 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま >>> すが・・・そっちのほうがいいですか? >> この対処の場合、l7vsdは、l7vsadmがつながってくるまで >> 起動完了とはならないってことでしょうか? >> そうであれば、l7vsdを起動してもl7vsadmを必ず実行するとは >> 限らない場合(ちょっと思いつきませんが試験時などにあるかも?)に >> よろしくない気がします。 > > もしかして、「l7vsd の一番親のプロセスが(誰が実行するかわからな > い)l7vsadm からの接続を待ち、接続があったら終了する(制御を呼び出 > し側に戻す)」と受け取られていますか? > > そうではなく、「l7vsd の一番親のプロセス自身が l7vsadm を実行し、 > それが成功する間では親プロセスが終了しない」という意味です。 > > 現状のコードは、おおざっぱに言って > > ================================================================================ > main() { > /* (略) */ > > daemon(); /* <- この時点で最初の l7vsd は exit するので、 > 呼び出し側に制御が戻る */ > > /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ > } > ================================================================================ > > となっているはずですが、上記のコメント中に記述したとおり、 > daemon()が呼ばれた時点で最初のプロセスは exit するので、 > /usr/sbin/ldirectord を呼び出した側に制御が戻ります。(つまりl7vsd > が起動完了しないうちに戻ります) > > ================================================================================ > main() { > /* (略) */ > if (fork() != 0) { > /* 親プロセス */ > while (/* system() なり fork && exec なりで l7vsadm を実行し、成功するかをチェック*/) { > sleep(interval_sec); > } > exit(0); > } > > daemon(); > > /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ > } > ================================================================================ > > のようにすれば、端末制御を握っている一番最初のプロセスが l7vsadm > の正常終了を確認するまで exit しなくなるはずです。 > > >>> 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ >>> プトですませるのがいいと思っています。 >> 私もスクリプトで良いと思います。 > > 了解しました。 > > -- > TATEISHI Katsuyuki <tatei****@oss*****> > > >