Class: Process::Status
Overview
A Status
contains information about a system process.
Thread-local variable $?
is initially nil
. Some methods assign to it a 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::Status
stat.to_i # => 25344
stat.stopped? # => false
stat.exited? # => true
stat.exitstatus # => 99
Instance Attribute Summary
-
#coredump? ⇒ Boolean
readonly
Returns
true
if the process generated a coredump when it terminated,false
if not. -
#exited? ⇒ Boolean
readonly
Returns
true
if the process exited normally (for example using anexit()
call or finishing the program),false
if not. -
#signaled? ⇒ Boolean
readonly
Returns
true
if the process terminated because of an uncaught signal,false
otherwise. - #stopped? ⇒ Boolean readonly
-
#success? ⇒ Boolean
readonly
Returns:
Instance Method Summary
-
#&(mask) ⇒ Integer
This method is deprecated as #to_i value is system-specific; use predicate methods like #exited? or #stopped?, or getters like #exitstatus or #stopsig.
-
#==(other) ⇒ Boolean
Returns whether the value of #to_i ==
other
: -
#>>(places) ⇒ Integer
This method is deprecated as #to_i value is system-specific; use predicate methods like #exited? or #stopped?, or getters like #exitstatus or #stopsig.
-
#exitstatus ⇒ Integer?
Returns the least significant eight bits of the return code of the process if it has exited;
nil
otherwise: -
#inspect ⇒ String
Returns a string representation of
self
: -
#pid ⇒ Integer
Returns the process ID of the process:
-
#stopsig ⇒ Integer?
Returns the number of the signal that caused the process to stop, or
nil
if the process is not stopped. -
#termsig ⇒ Integer?
Returns the number of the signal that caused the process to terminate or
nil
if the process was not terminated by an uncaught signal. -
#to_i ⇒ Integer
Returns the system-dependent integer status of
self
: -
#to_s ⇒ String
Returns a string representation of
self
:
Instance Attribute Details
#coredump? ⇒ Boolean
(readonly)
Returns true
if the process generated a coredump when it terminated, false
if not.
Not available on all platforms.
# File 'process.c', line 1127
static VALUE pst_wcoredump(VALUE st) { #ifdef WCOREDUMP int status = PST2INT(st); return RBOOL(WCOREDUMP(status)); #else return Qfalse; #endif }
#exited? ⇒ Boolean
(readonly)
Returns true
if the process exited normally (for example using an exit()
call or finishing the program), false
if not.
# File 'process.c', line 1061
static VALUE pst_wifexited(VALUE st) { int status = PST2INT(st); return RBOOL(WIFEXITED(status)); }
#signaled? ⇒ Boolean
(readonly)
Returns true
if the process terminated because of an uncaught signal, false
otherwise.
# File 'process.c', line 1024
static VALUE pst_wifsignaled(VALUE st) { int status = PST2INT(st); return RBOOL(WIFSIGNALED(status)); }
#stopped? ⇒ Boolean
(readonly)
Returns true
if this process is stopped, and if the corresponding Process#wait call had the WUNTRACED flag set, false
otherwise.
# File 'process.c', line 988
static VALUE pst_wifstopped(VALUE st) { int status = PST2INT(st); return RBOOL(WIFSTOPPED(status)); }
#success? ⇒ Boolean
(readonly)
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.
# File 'process.c', line 1106
static VALUE pst_success_p(VALUE st) { int status = PST2INT(st); if (!WIFEXITED(status)) return Qnil; return RBOOL(WEXITSTATUS(status) == EXIT_SUCCESS); }
Instance Method Details
#&(mask) ⇒ Integer
This method is deprecated as #to_i value is system-specific; use predicate methods like #exited? or #stopped?, or getters like #exitstatus or #stopsig.
Returns the logical AND of the value of #to_i with mask
:
`cat /nop`
stat = $? # => #<Process::Status: pid 1155508 exit 1>
sprintf('%x', stat.to_i) # => "100"
stat & 0x00 # => 0
::ArgumentError
is raised if mask
is negative.
# File 'process.c', line 894
static VALUE pst_bitand(VALUE st1, VALUE st2) { int status = PST2INT(st1); int mask = NUM2INT(st2); if (mask < 0) { rb_raise(rb_eArgError, "negative mask value: %d", mask); } #define WARN_SUGGEST(suggest) \ rb_warn_deprecated_to_remove_at(3.4, "Process::Status#&", suggest) switch (mask) { case 0x80: WARN_SUGGEST("Process::Status#coredump?"); break; case 0x7f: WARN_SUGGEST("Process::Status#signaled? or Process::Status#termsig"); break; case 0xff: WARN_SUGGEST("Process::Status#exited?, Process::Status#stopped? or Process::Status#coredump?"); break; case 0xff00: WARN_SUGGEST("Process::Status#exitstatus or Process::Status#stopsig"); break; default: WARN_SUGGEST("other Process::Status predicates"); break; } #undef WARN_SUGGEST status &= mask; return INT2NUM(status); }
#==(other) ⇒ Boolean
# File 'process.c', line 868
static VALUE pst_equal(VALUE st1, VALUE st2) { if (st1 == st2) return Qtrue; return rb_equal(pst_to_i(st1), st2); }
#>>(places) ⇒ Integer
This method is deprecated as #to_i value is system-specific; use predicate methods like #exited? or #stopped?, or getters like #exitstatus or #stopsig.
Returns the value of #to_i, shifted places
to the right:
`cat /nop`
stat = $? # => #<Process::Status: pid 1155508 exit 1>
stat.to_i # => 256
stat >> 1 # => 128
stat >> 2 # => 64
::ArgumentError
is raised if places
is negative.
# File 'process.c', line 949
static VALUE pst_rshift(VALUE st1, VALUE st2) { int status = PST2INT(st1); int places = NUM2INT(st2); if (places < 0) { rb_raise(rb_eArgError, "negative shift value: %d", places); } #define WARN_SUGGEST(suggest) \ rb_warn_deprecated_to_remove_at(3.4, "Process::Status#>>", suggest) switch (places) { case 7: WARN_SUGGEST("Process::Status#coredump?"); break; case 8: WARN_SUGGEST("Process::Status#exitstatus or Process::Status#stopsig"); break; default: WARN_SUGGEST("other Process::Status attributes"); break; } #undef WARN_SUGGEST status >>= places; return INT2NUM(status); }
#exitstatus ⇒ Integer?
Returns the least significant eight bits of the return code of the process if it has exited; nil
otherwise:
`exit 99`
$?.exitstatus # => 99
# File 'process.c', line 1083
static VALUE pst_wexitstatus(VALUE st) { int status = PST2INT(st); if (WIFEXITED(status)) return INT2NUM(WEXITSTATUS(status)); return Qnil; }
#inspect ⇒ String
Returns a string representation of self
:
system("false")
$?.inspect # => "#<Process::Status: pid 1303494 exit 1>"
# File 'process.c', line 835
static VALUE pst_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; }
#pid ⇒ Integer
Returns the process ID of the process:
system("false")
$?.pid # => 1247002
# File 'process.c', line 745
static VALUE pst_pid_m(VALUE self) { rb_pid_t pid = pst_pid(self); return PIDT2NUM(pid); }
#stopsig ⇒ Integer?
Returns the number of the signal that caused the process to stop, or nil
if the process is not stopped.
# File 'process.c', line 1005
static VALUE pst_wstopsig(VALUE st) { int status = PST2INT(st); if (WIFSTOPPED(status)) return INT2NUM(WSTOPSIG(status)); return Qnil; }
#termsig ⇒ Integer?
Returns the number of the signal that caused the process to terminate or nil
if the process was not terminated by an uncaught signal.
# File 'process.c', line 1041
static VALUE pst_wtermsig(VALUE st) { int status = PST2INT(st); if (WIFSIGNALED(status)) return INT2NUM(WTERMSIG(status)); return Qnil; }
#to_i ⇒ Integer
Returns the system-dependent integer status of self
:
`cat /nop`
$?.to_i # => 256
# File 'process.c', line 725
static VALUE pst_to_i(VALUE self) { int status = pst_status(self); return RB_INT2NUM(status); }
#to_s ⇒ String
Returns a string representation of self
:
`cat /nop`
$?.to_s # => "pid 1262141 exit 1"
# File 'process.c', line 808
static VALUE pst_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; }