From 8624cec9d30f553cf155def086f56001dd072b4a Mon Sep 17 00:00:00 2001 From: mrkn Date: Tue, 12 Dec 2017 09:00:17 +0000 Subject: [PATCH] process.c: add Process.last_status * process.c (proc_s_last_status): add Process.last_status [ruby-core:83514] [Feature #14043] * test/ruby/test_process.rb (test_last_status): add a test case for Process.last_status. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- process.c | 22 ++++++++++++++++++++++ test/ruby/test_process.rb | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/process.c b/process.c index 7662387eca..6bc5131922 100644 --- a/process.c +++ b/process.c @@ -472,6 +472,27 @@ rb_last_status_get(void) return GET_THREAD()->last_status; } +/* + * call-seq: + * Process.last_status -> Process::Status + * + * Return the status of the last executed child process in the + * current thread. + * + * Process.wait Process.spawn("ruby", "-e", "exit 13") + * Process.last_status #=> # + * + * If no child process has never been executed in the current + * thread, this returns +nil+. + * + * Process.last_status #=> nil + */ +static VALUE +proc_s_last_status(VALUE mod) +{ + return rb_last_status_get(); +} + void rb_last_status_set(int status, rb_pid_t pid) { @@ -7600,6 +7621,7 @@ InitVM_process(void) rb_define_singleton_method(rb_mProcess, "exit!", rb_f_exit_bang, -1); rb_define_singleton_method(rb_mProcess, "exit", rb_f_exit, -1); rb_define_singleton_method(rb_mProcess, "abort", rb_f_abort, -1); + rb_define_singleton_method(rb_mProcess, "last_status", proc_s_last_status, 0); rb_define_module_function(rb_mProcess, "kill", rb_f_kill, -1); /* in signal.c */ rb_define_module_function(rb_mProcess, "wait", proc_wait, -1); diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index d68aef624e..e4c7bc9190 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -2352,4 +2352,9 @@ EOS end end end + + def test_last_status + Process.wait spawn(RUBY, "-e", "exit 13") + assert_same(Process.last_status, $?) + end end