summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 09:00:17 +0000
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 09:00:17 +0000
commit8624cec9d30f553cf155def086f56001dd072b4a (patch)
tree2762c7ac937b5734480700b2235b11aa001da4c1 /process.c
parent79c2e6eccf9ba1d3197d179351761104baadfa63 (diff)
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
Diffstat (limited to 'process.c')
-rw-r--r--process.c22
1 files changed, 22 insertions, 0 deletions
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 #=> #<Process::Status: pid 4825 exit 13>
+ *
+ * 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);