[openrtm-users 02902] Re: OS X においてマネージャ初期化時に固まる症状

Ando Noriaki n-ando @ aist.go.jp
2013年 8月 29日 (木) 09:42:22 JST


中岡さん

安藤です

対処策をお送りいただきありがとうございます。
なぜLinuxではpcloseでゾンビが残っていたのか原因がわかりませんが、
とりあえずこれで行きたいと思います。




2013年8月27日 13:42 Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>:
>
> 安藤さん
>
> 本件ご確認いただきありがとうございます。
>
> waitですが、wait(NULL)とすると、waitpidでpidに-1を指定したのと同じになる
> ようです。この場合、全ての子プロセスの終了を待つことになってしまいます。
>
> そこで、waitではなくwaitpidの方の関数を使うようにして、pidのパラメータに
> 0を入れるというのはどうでしょう?こうしますと、「全ての子プロセス」では
> なくて、「プロセスグループidが親と同一の子プロセス」になるようです。(ち
> なみに、デフォルトではプロセスグループidは親と同じになるようです。)
>
> Choreonoidでは子プロセス起動時にプロセスグループidを変えるようにしていま
> すので、こちらを使えばブロックしないことを確認しました。
>
> もう少し具体的に書くと、
>
> wait(NULL);
>
> となっているところを、
>
> waitpid(0, NULL, NULL);
>
> とすればOKです。
>
> 以上ご検討ください。
>
> Choreonoidでは当面この修正を行うパッチファイルを配布に入れておこうと思い
> ます。
>
> 以上よろしくお願いします。
>
> (08/27/13 11:04), Ando Noriaki wrote:
>> たびたびすみません。
>> ちょっと調べてみたのですが、このwait()一応理由があって入ったようです。
>> もう少し調査が必要かもしれません。
>>
>> http://www.openrtm.org/openrtm/en/content/openrtm-users-01670-%E3%82%BE%E3%83%B3%E3%83%93%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%B6%88%E3%81%97%E6%96%B9
>>
>> 安藤
>>
>>
>>
>> 2013年8月27日 10:43 Ando Noriaki <n-ando @ aist.go.jp>:
>>> 中岡さん
>>>
>>> 安藤です
>>>
>>> ご指摘ありがとうございます。waitはpcloseに含まれているので、いらないですね。
>>> おそらく、このwaitがNameServiceの子プロセスの終了待ちをしてしまっているため
>>> ブロックしているのだと思います。チケット出して修正しておきます。
>>> http://redmine.openrtm.org/issues/2807
>>>
>>> ありがとうございました。
>>>
>>>
>>> 2013年8月26日 22:12 Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>:
>>>>
>>>> すみません、訂正です。
>>>>
>>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>>> 108行と107行にある
>>>>>
>>>>> wait(NULL)
>>>>
>>>> は、108行と167行でした。
>>>>
>>>>
>>>> (08/26/13 22:08), 中岡 慎一郎 wrote:
>>>>>
>>>>> 産総研の中岡です。
>>>>>
>>>>> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
>>>>> 不可解な症状に遭遇しましたので、報告させてください。
>>>>>
>>>>> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
>>>>> り、ある条件下でこの関数が固まります。
>>>>>
>>>>> 固まる箇所をたどっていくと、
>>>>>
>>>>> Manager::initNaming() -
>>>>> NamingManager::registerNameServer()-
>>>>> NamingManager::createNamingObj() -
>>>>> NamingOnCorba::NamingOnCorba() -
>>>>> coil::dest_to_endpoint()
>>>>>
>>>>> ときて、ここから呼ばれる
>>>>> coil::find_dest_ifname() と
>>>>> coil::ifname_to_ipaddr() の関数です。
>>>>>
>>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>>> 108行と107行にある
>>>>>
>>>>> wait(NULL)
>>>>>
>>>>> でブロックしたまま帰ってきていません。
>>>>>
>>>>> ある条件というのは、マネージャの初期化を行なっているプロセスから、
>>>>> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
>>>>> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
>>>>> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
>>>>> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>>>>>
>>>>> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
>>>>> まらなくなり、その後も特に問題なく動いているように見えます。
>>>>>
>>>>> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
>>>>> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
>>>>> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
>>>>> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>>>>>
>>>>> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
>>>>> らうというのは問題ありますでしょうか?
>>>>>
>>>>
>>>>
>>>> --
>>>> Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>
>>>> _______________________________________________
>>>> openrtm-users mailing list
>>>> openrtm-users @ openrtm.org
>>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>
>
>
> --
> Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users



-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    ディペンダブルシステム研究グループ、ソフトウエアプラットフォーム研究班
    主任研究員, 博士(工学)
    〒305-8568 つくば市梅園1-1-1 中央第2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org

Noriaki Ando, Ph.D.
    Senior Research Scientist, Dependable Systems R.G., ISRI, AIST
    AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org


More information about the openrtm-users mailing list