diff options
-rw-r--r-- | test/ruby/test_signal.rb | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index eaf21b8f2d..f58eea5ddb 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -243,19 +243,21 @@ EOS def test_signame return unless Process.respond_to?(:kill) - begin - 10.times do - caught = 0 - signame = "wrong" - - Signal.trap("INT") { |signo| signame = Signal.signame(signo); caught = 1; } - Process.kill("INT", 0) - - sleep 0.01 while caught==0 + 10.times do + IO.popen([EnvUtil.rubybin, "-e", <<EOS, :err => File::NULL]) do |child| + Signal.trap("INT") do |signo| + signame = Signal.signame(signo) + Marshal.dump(signame, STDOUT) + STDOUT.flush + exit 0 + end + sleep +EOS + sleep 0.1 + Process.kill("INT", child.pid) + signame = Marshal.load(child) assert_equal(signame, "INT") end - ensure - Signal.trap("INT", "DEFAULT") end end end |