A Process::Status contains information about a system process.

Thread-local variable $? is initially nil. Some methods assign to it a Process::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
Class Methods

Like Process.wait, but returns a Process::Status object (instead of an integer pid or nil); see Process.wait for the values of pid and flags.

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

Process.spawn('cat /nop') # => 1155880
Process::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 hook Fiber::Scheduler#process_wait.

Not available on all platforms.

Instance Methods

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.

Returns whether the value of to_i == other:

`cat /nop`
stat = $?                # => #<Process::Status: pid 1170366 exit 1>
sprintf('%x', stat.to_i) # => "100"
stat == 0x100            # => true

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.

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

Not available on all platforms.

Returns true if the process exited normally (for example using an exit() call or finishing the program), false if not.

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

`exit 99`
$?.exitstatus # => 99

Returns a string representation of self:

system("false")
$?.inspect # => "#<Process::Status: pid 1303494 exit 1>"

Returns the process ID of the process:

system("false")
$?.pid # => 1247002

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

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

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

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.

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

Returns the system-dependent integer status of self:

`cat /nop`
$?.to_i # => 256

Returns a string representation of self:

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