From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2007-03-17T12:53:55+09:00 Subject: [ruby-dev:30611] Re: [BUG] waitpid for ruby-trunk けいじゅ@いしつかです. In [ruby-dev:30610] the message: "[ruby-dev:30610] Re: [BUG] waitpid for ruby-trunk", on Mar/17 12:16(JST) "KUBO Takehiro" writes: >久保です。 >Linux kernel 2.6 でも、環境変数 LD_ASSUME_KERNEL=2.4.19 >を設定して、LinuxThreads を使用させるようにしたら、再現しました。 >以下の LinuxTheads の制限にひっかかっているのでしょう。 > http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html >> あるスレッドが fork(2) を使って新しい子プロセスを作成した場合、 >> どのスレッドでもこの子プロセスを wait(2) できるべきである。し >> かしながら、この実装では子プロセスを作成したスレッドだけがこ >> の子プロセスを wait(2) できる。 なるほど... なかなか奥が深いですね... 下記スクリプトにしたら Process::wiaitpid が正常に動作しました. shell.rb の方も同様にしたら動作するようになったようです. ありがとうございました. -- Thread.start{ p1 = fork{exec "sleep", "1"} begin puts "wait p#1" _pid = Process.waitpid(p1, nil) puts "end p#1" rescue p $! end } Thread.start{ p2 = fork{exec "sleep", "1"} begin puts "wait p#2" _pid = Process.waitpid(p2, nil) puts "end p#2" rescue p $! end } sleep 20 __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---