From 4f5b070378fdf4c321fabaae707ba331f0525ed7 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 9 Feb 2004 07:30:17 +0000 Subject: [PATCH] * process.c (detach_process_watcher): return the last status. [ruby-dev:22841] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ process.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06706874a8..9e590a4cf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Feb 9 16:30:12 2004 Nobuyoshi Nakada + + * process.c (detach_process_watcher): return the last status. + [ruby-dev:22841] + Sun Feb 8 16:46:08 2004 Nobuyoshi Nakada * lib/pp.rb (PP::PPMethods::object_address_group): suppress negative diff --git a/process.c b/process.c index 4198b481b9..697b7c3a84 100644 --- a/process.c +++ b/process.c @@ -809,14 +809,14 @@ proc_waitall() } static VALUE -detach_process_watcer(pid_p) +detach_process_watcher(pid_p) int *pid_p; { int cpid, status; for (;;) { cpid = rb_waitpid(*pid_p, &status, WNOHANG); - if (cpid == -1) return Qnil; + if (cpid == -1) return rb_last_status; rb_thread_sleep(1); } } @@ -825,7 +825,7 @@ VALUE rb_detach_process(pid) int pid; { - return rb_thread_create(detach_process_watcer, (void*)&pid); + return rb_thread_create(detach_process_watcher, (void*)&pid); } @@ -843,7 +843,12 @@ rb_detach_process(pid) * only when you do not intent to explicitly wait for the child to * terminate. detach only checks the status * periodically (currently once each second). - * + * + * The waiting thread returns the exit status of the detached process + * when it terminates, so you can use Thread#join to + * know the result. If specified _pid_ is not a valid child process + * ID, the thread returns +nil+ immediately. + * * In this first example, we don't reap the first child process, so * it appears as a zombie in the process status display. *