summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_signal.rb30
1 files changed, 19 insertions, 11 deletions
diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb
index 7877a35129..a2bdf02b88 100644
--- a/test/ruby/test_signal.rb
+++ b/test/ruby/test_signal.rb
@@ -310,17 +310,25 @@ class TestSignal < Test::Unit::TestCase
end
def test_self_stop
- assert_ruby_status([], <<-'end;')
- begin
- fork{
- sleep 1
- Process.kill(:CONT, Process.ppid)
- }
- Process.kill(:STOP, Process.pid)
- rescue NotImplementedError
- # ok
- end
- end;
+ omit unless Process.respond_to?(:fork)
+ omit unless defined?(Process::WUNTRACED)
+
+ # Make a process that stops itself
+ child_pid = fork do
+ Process.kill(:STOP, Process.pid)
+ end
+
+ # The parent should be notified about the stop
+ _, status = Process.waitpid2(child_pid, Process::WUNTRACED)
+ assert status.stopped?
+
+ # It can be continued
+ Process.kill(:CONT, child_pid)
+
+ # And the child then runs to completion
+ _, status = Process.waitpid2(child_pid)
+ assert status.exited?
+ assert status.success?
end
def test_sigwait_fd_unused