At Mon, 18 Nov 2002 13:47:07 +0900,
matz wrote:
>     on 02/11/18, きた <kita / kitaj.no-ip.com> writes:
> 
> |のように,GC で回収させると pipe は close されますが,子プロセスは
> |wait されないようです.

 私も最近「実行中にゾンビがたくさんできる」の指摘で気づき、
IO::popen() / open("| ...") で開いたものは明示的に close() する
ように直したところでした。

> おっしゃる通り、プロセスのwaitは行っていません。というのはた
> だでさえ「遅い遅い」と文句が出ているGC の最中にwaitでブロッ
> クしてしまうのは避けたいからです。より望ましい実装の提案はい
> つもお待ちしています。

 IO クラスで未回収 pid のリストを管理するしかないでしょうか。
各インスタンスの finalizer でそれらについて WNOHANG で waitpid
してやればよさそう。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"When I leave I don't know what I'm hoping to find
              When I leave I don't know what I'm leaving behind.."