1. Process::
  2. Status

class Process::Status

AProcess::Status contains information about a system process.

Thread-local variable$? is initiallynil. Some methods assign to it aProcess::Status object that represents a system process (either running or terminated):

`ruby -e "exit 99"`stat =$?# => #<Process::Status: pid 1262862 exit 99>stat.class# => Process::Statusstat.to_i# => 25344stat.stopped?# => falsestat.exited?# => truestat.exitstatus# => 99

Public Class Methods

Source
static VALUErb_process_status_waitv(int argc, VALUE *argv, VALUE _){    rb_check_arity(argc, 0, 2);    rb_pid_t pid = -1;    int flags = 0;    if (argc >= 1) {        pid = NUM2PIDT(argv[0]);    }    if (argc >= 2) {        flags = RB_NUM2INT(argv[1]);    }    return rb_process_status_wait(pid, flags);}

LikeProcess.wait, but returns aProcess::Status object (instead of an integer pid or nil); seeProcess.wait for the values ofpid andflags.

If there are child processes, waits for a child process to exit and returns aProcess::Status object containing information on that process; sets thread-local variable$?:

Process.spawn('cat /nop')# => 1155880Process::Status.wait# => #<Process::Status: pid 1155880 exit 1>$?# => #<Process::Status: pid 1155508 exit 1>

If there is no child process, returns an “empty”Process::Status object that does not represent an actual process; does not set thread-local variable$?:

Process::Status.wait# => #<Process::Status: pid -1 exit 0>$?# => #<Process::Status: pid 1155508 exit 1> # Unchanged.

May invoke the scheduler hookFiber::Scheduler#process_wait.

Not available on all platforms.

Public Instance Methods

Source
static VALUEpst_equal(VALUE st1, VALUE st2){    if (st1 == st2) return Qtrue;    return rb_equal(pst_to_i(st1), st2);}

Returns whether the value ofto_i ==other:

`cat /nop`stat =$?# => #<Process::Status: pid 1170366 exit 1>sprintf('%x',stat.to_i)# => "100"stat==0x100# => true
Source
static VALUEpst_wcoredump(VALUE st){#ifdef WCOREDUMP    int status = PST2INT(st);    return RBOOL(WCOREDUMP(status));#else    return Qfalse;#endif}

Returnstrue if the process generated a coredump when it terminated,false if not.

Not available on all platforms.

Source
static VALUEpst_wifexited(VALUE st){    int status = PST2INT(st);    return RBOOL(WIFEXITED(status));}

Returnstrue if the process exited normally (for example using anexit() call or finishing the program),false if not.

Source
static VALUEpst_wexitstatus(VALUE st){    int status = PST2INT(st);    if (WIFEXITED(status))        return INT2NUM(WEXITSTATUS(status));    return Qnil;}

Returns the least significant eight bits of the return code of the process if it has exited;nil otherwise:

`exit 99`$?.exitstatus# => 99
Source
static VALUEpst_inspect(VALUE st){    rb_pid_t pid;    int status;    VALUE str;    pid = pst_pid(st);    if (!pid) {        return rb_sprintf("#<%s: uninitialized>", rb_class2name(CLASS_OF(st)));    }    status = PST2INT(st);    str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st)));    pst_message(str, pid, status);    rb_str_cat2(str, ">");    return str;}

Returns a string representation ofself:

system("false")$?.inspect# => "#<Process::Status: pid 1303494 exit 1>"
Source
static VALUEpst_pid_m(VALUE self){    rb_pid_t pid = pst_pid(self);    return PIDT2NUM(pid);}

Returns the process ID of the process:

system("false")$?.pid# => 1247002
Source
static VALUEpst_wifsignaled(VALUE st){    int status = PST2INT(st);    return RBOOL(WIFSIGNALED(status));}

Returnstrue if the process terminated because of an uncaught signal,false otherwise.

Source
static VALUEpst_wifstopped(VALUE st){    int status = PST2INT(st);    return RBOOL(WIFSTOPPED(status));}

Returnstrue if this process is stopped, and if the corresponding wait call had the Process::WUNTRACED flag set,false otherwise.

Source
static VALUEpst_wstopsig(VALUE st){    int status = PST2INT(st);    if (WIFSTOPPED(status))        return INT2NUM(WSTOPSIG(status));    return Qnil;}

Returns the number of the signal that caused the process to stop, ornil if the process is not stopped.

Source
static VALUEpst_success_p(VALUE st){    int status = PST2INT(st);    if (!WIFEXITED(status))        return Qnil;    return RBOOL(WEXITSTATUS(status) == EXIT_SUCCESS);}

Returns:

  • true if the process has completed successfully and exited.

  • false if the process has completed unsuccessfully and exited.

  • nil if the process has not exited.

Source
static VALUEpst_wtermsig(VALUE st){    int status = PST2INT(st);    if (WIFSIGNALED(status))        return INT2NUM(WTERMSIG(status));    return Qnil;}

Returns the number of the signal that caused the process to terminate ornil if the process was not terminated by an uncaught signal.

Source
static VALUEpst_to_i(VALUE self){    int status = pst_status(self);    return RB_INT2NUM(status);}

Returns the system-dependent integer status ofself:

`cat /nop`$?.to_i# => 256
Source
static VALUEpst_to_s(VALUE st){    rb_pid_t pid;    int status;    VALUE str;    pid = pst_pid(st);    status = PST2INT(st);    str = rb_str_buf_new(0);    pst_message(str, pid, status);    return str;}

Returns a string representation ofself:

`cat /nop`$?.to_s# => "pid 1262141 exit 1"