From: "akira yamada / やまだあきら" Date: 2001-11-15T20:23:02+09:00 Subject: [ruby-dev:15174] strange behavior about PTY.spawn 以下のスクリプトを実行して, PTY.spawnされた/bin/shを killでころしてやるとRuntimeErrorが発生しますが, これをrescueですくってやることができません. Thread.new{ begin PTY.spawn("/bin/sh"){|r,w,pid| p [:pid,pid]; sleep} rescue RuntimeError p $! end } loop{sleep 1} こんな感じになります. $ ruby -rpty -ve 'Thread.new{begin; PTY.spawn("/bin/sh"){|r,w,pid| p [:pid,pid]; sleep}; rescue RuntimeError; p $!; end}; loop{sleep 1}' ruby 1.6.5 (2001-11-13) [i386-linux] [:pid, 5500] -e:1:in `sleep': Child_changed: 5500 (RuntimeError) from -e:1 from -e:1:in `loop' from -e:1 loop{}の中で例外が起きちゃってるようなんですが, これはptyライブラリのバグなんでしょうか? ちなみにバージョン1.7では $ ruby1.7 -rpty -ve 'Thread.new{begin; PTY.spawn("/bin/sh"){|r,w,pid| p [:pid,pid]; sleep}; rescue RuntimeError; p $!; end}; loop{sleep 1}' ruby 1.7.2 (2001-11-08) [i386-linux] start watching PTY command (5502) [:pid, 5502] PTY command (5502) finished (5502:9) -e:1:in `sleep': Interrupt (← 端末からC-cで止めた) from -e:1 from -e:1:in `loop' from -e:1 となります(こちらは例外が起こっていないだけかもしれませんが). -- やまだ あきら (akira@arika.org, akira@ruby-lang.org or akira@linux.or.jp)