Ruby から起動した外部プロセスが終了しない事がある?

Ruby の system で cap の invoke を実行して rsync した時に、ruby--cap--rsync のプロセスツリーが全部スリープのまま残っている事がある。
その際、大本の ruby の処理は system 以降も実行されている。

  • system から制御が戻っている?
  • system から生成されたプロセス(スレッド?)がスリープのまま残ってるのはなんで?
  • ruby のプロセスが終了してないのはなんで?system で生成したプロセスの終了を待ってるの?

rb_f_system を軽く読んでみたけど、いまいちよくわからない。
とにかく、一番気になっているのは、「なんで system の先に処理が進んでいるのか?」という事。system で実行したコマンドが終了(プロセスが終了)してないのに、system の次に処理が進んでいる理由がわからない。

Ruby が悪いのか、Capistrano が悪いのか、Linux が悪いのか、使い方が悪いのか。常に発生するわけではなく、しかしながら、そこそこの頻度で発生するので、外部要因に左右されているのかもしれず。

気づき次第 kill してごまかせなくもないけれども健全ではない。

まだ、いまいち問題を整理・把握しきれていないので、何を頼ったものかわからず…。取り急ぎのメモでした。