From: Koji Arai Date: 2001-04-04T02:27:06+09:00 Subject: [ruby-dev:12745] Re: Process.waitall (Re: [BUG] Process::Status) 新井です。 In message "[ruby-dev:12741] Re: Process.waitall (Re: [BUG] Process::Status)" on 03 Apr 2001 11:13:18 +0900, matz@zetabits.com (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |一方、waitallにブロックがなかったら > | > |begin > | loop { > | ret = Process.wait2 > | ... > | } > |rescue ECHILD > |end > | > |と書かないといけないのはちょっと面倒かなあとは思いますが、あ > |んまそういうことしようと思ったこともないので今のところ強く要 > |望しないでおきます。(まだ考えがまとまってないし>自分) > > for pid, status in Process.waitall > ... > end > > と本質的に違うものはないような... 全子プロセスが終了するのを待ってから繰り返すのと ステータスの通知が来る都度繰り返すのは違いますよね? start = Time.now 5.times {|n| fork() { sleep n; exit n } } for pid, status in Process.waitall p [(Time.now - start).to_i, pid, status.exitstatus] end => [4, 604, 0] [4, 605, 1] [4, 606, 2] [4, 607, 3] [4, 608, 4] start = Time.now 5.times {|n| fork() { sleep n; exit n } } loop { pid, status = Process.wait2 p [(Time.now - start).to_i, pid, status.exitstatus] } => [0, 610, 0] [1, 611, 1] [2, 612, 2] [3, 613, 3] [4, 614, 4] -:7:in `wait2': No child processes (Errno::ECHILD) -- 新井康司 (Koji Arai)