[openrtm-users 00052] Re: RTシステムの終了について

Noriaki Ando n-ando @ aist.go.jp
2005年 12月 14日 (水) 13:47:57 JST


安藤です

> > 安藤@産総研です
> > 
> > > いつも御世話になります。宇田@NECシステムテクノロジーです
> > > 
> > > RTシステムの終了方法についてご教授ください。
> > > 
> > > 1つのRTシステム全体を統括している(アプリケーションに相当する)
> > > コンポーネントがあり、そこからシステム全体に対して終了指示を出し
> > > たい場合、何か統一的な枠組みはありますでしょうか?
> > 
> > 終了指示というのは、コンポーネントをExit状態にできればいいのでしょうか?
> > でしたら、各コンポーネントに対し、rtc_exit() を呼べば
> > (ACTIVE状態の場合は、rtc_stop(), rtc_exit()の順で呼ぶ)終了できるはずです。
> > 
> > ですので、統括コンポーネントは、サブコンポーネントのオブジェクト
> > リファレンスを何らかの方法で取得できていなければなりません。
> > 
> > マネージャには一応 findComponents というメソッドが用意されています。
> > これで、サブコンポーネントを探し出して、listか何かに入れて、
> > 終了時に、list内のコンポーネントに対して一気にrtc_exit()を呼んでやれば
> > サブコンポーネントも止めることができます。
> 
> こちらの findComponents は、同じネーミングサービスに登録されている
> コンポーネントであれば(ホストやプロセスが異なっていても)全て検索
> できるのでしょうか?
> 
> また、引数にコンポーネント名を取るようですが、ワイルドカード指定の
> ようなものは可能でしょうか、それとも探すべきコンポーネント名は要求
> 元で全て把握している必要がありますでしょうか?

ネームサービスに登録されているコンポーネントを正規表現
を使って検索できます。
ですので、戻り値はリストになっています。

> > > 例えば以下の例で、統括コンポーネントからの終了指示をもとに、その
> > > コンポーネント自身とサブコンポーネント1〜4のスレッドだけでなく、
> > > それらを包含するプロセスA〜C(XXXComp の実装方式に準拠)も終了
> > > させたい場合、終了指示を適切に伝える方法はありますでしょうか。
> > 
> > プロセスを終了する公にされている方法はありません。
> > ただし、マネージャのメインループ (runManager()) が終了されれば、
> > プロセスも終了するので、これがご希望の方法だとおもいます。
> 
> はい、この方法を教えて頂きたいと思っていました。
> 
> 
> > 本来なら、ユーザプログラムから、マネージャを終了させる
> > メソッドを提供すべきなのですが、今のところそういうものはありません。
> > #次バージョンでは提供いたします。
> > 
> > ただし、SIG_INIT(Ctrl+C)の割り込みハンドラhandler()という関数が
> > ありまして、こいつを呼ぶとマネージャが終了します。
> > 
> > ですので、この関数を呼びたい場所のファイルの中で、
> > 
> > extern "C" void handler (int);
> > 
> > と宣言しておいて、終了させたいタイミングで、
> > 
> > handler(0);
> > 
> > などと呼んでやると、もしかしたらプロセスを終了させられるかもしれません。
> > 
> > #こちらでもやってみましたが、一応runManager()は抜けるものの、
> > #CORBAの例外がでてアボートしました。
> 
> 通常の場合は、runManager()を含むプロセスは(コンソールウィンドウを
> 閉じるなどの操作で)強制終了させることになるのでしょうか?

通常はCtrl+C (SIGINT) で終了させます。
SIGINTで終了させると、配下のコンポーネントをすべて安全に
終了させ、かつネームサーバから自分の名前を削除して終わります。

それ以外の方法ですと、コンポーネントがActive状態のまま終わったり、
ネームサーバに名前が残ったままになります。

          安藤慶昭@独立行政法人産業技術総合研究所 研究員
                    知能システム研究部門 タスクインテリジェンス研究グループ
                    〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                    TEL: 029-861-5981 FAX: 029-861-5971
                    n-ando @ aist.go.jp, n-ando @ ieee.org



openrtm-users メーリングリストの案内