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

Shin'ichiro Nakaoka s.nakaoka @ aist.go.jp
2013年 8月 27日 (火) 13:42:04 JST


安藤さん

本件ご確認いただきありがとうございます。

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>


More information about the openrtm-users mailing list