Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Process::Statusクラス

class Process::Status

クラスの継承リスト: Process::Status < Object < Kernel < BasicObject

要約

プロセスの終了ステータスを表すクラスです。 メソッド Process.#wait2 などの返り値として使われます。

使用例

wait を使用した例

fork { exit }
Process.wait
case
when $?.signaled?
  p "child #{$?.pid} was killed by signal #{$?.termsig}"
  if $?.coredump?   # システムがこのステータスをサポートしてなければ常にfalse
    p "child #{$?.pid} dumped core."
  end
when $?.stopped?
  # 実際には Process.wait を使用しているので、ここに来ることはない
  p "child #{$?.pid} was stopped by signal #{$?.stopsig}"
when $?.exited?
  p "child #{$?.pid} exited normally. status=#{$?.exitstatus}"
else
  p "unknown status %#x" % $?.to_i
end

SIGCHLD を trap する例

trap(:SIGCHLD) {|sig|

  puts "interrupted by signal #{sig} at #{caller[1]}"
  # 複数の子プロセスの終了に対して1つの SIGCHLD しか届かない
  # 場合があるのでループさせる必要があります

  while Process.waitpid(-1, Process::WNOHANG|Process::WUNTRACED)
    case
    when $?.signaled?
      puts "   child #{$?.pid} was killed by signal #{$?.termsig}"
      if $?.coredump?
        puts "   child #{$?.pid} dumped core."
      end
    when $?.stopped?
      puts "   child #{$?.pid} was stopped by signal #{$?.stopsig}"
    when $?.exited?
      puts "   child #{$?.pid} exited normally. status=#{$?.exitstatus}"
    else
      p "unknown status %#x" % $?.to_i
    end
  end
}

p pid1 = fork { sleep 1; exit }
p pid2 = fork { loop { sleep } } # signal を待つための sleep
begin
   Process.kill :STOP, pid2
   sleep                      # SIGCHLD を待つための sleep
   Process.kill :CONT, pid2
   Process.kill :TERM, pid2
   loop { sleep }             # SIGCHLD を待つための sleep
rescue Errno::ECHILD
  puts "done"
end

=> 12964
   12965
   interrupted by signal 17 at -:27:in `sleep'
      child 12965 was stopped by signal 19
   interrupted by signal 17 at -:30:in `sleep'
      child 12965 was killed by signal 15
   interrupted by signal 17 at -:30:in `sleep'
      child 12964 exited normally. status=0
   done

インスタンスメソッド

定義 説明
self & other -> Integer

self.to_i & other と同じです。 このメソッドは後方互換性のためにあります。

self == other -> bool

同じステータスの場合に真を返します。

self >> num -> Integer

self.to_i >> num と同じです。

coredump? -> bool

終了時にコアダンプしていたら真を返します。

exited? -> bool

プロセスが exit(2) などにより正常に終了した場合に、真を返します。 そうでない場合に false を返します。

exitstatus -> Integer | nil

exited? が真の場合プロセスが返した終了ステータスの整数を、そ うでない場合は nil を返します。

inspect -> String

自身を人間が読みやすい形の文字列表現にして返します。

pid -> Integer

終了したプロセスのプロセス ID を返します。

signaled? -> bool

プロセスがハンドラを定義していないシグナルを受けて終了した場合に真 を返します。

stopped? -> bool

プロセスが現在停止(終了ではない)している場合に真を返します。 Process.#waitpidProcess::WUNTRACED フラグを設定した 場合にだけ真になりえます。

stopsig -> Integer | nil

stopped? が真の場合そのシグナルの番号を、そうでない場合は nil を返します。

success? -> bool

プロセスの終了状態が成功である場合に true を返します。 そうでない場合に false を返します。

termsig -> Integer | nil

signaled? が真の場合プロセスを終了させたシグナル番号を、 そうでない場合は nil を返します。

to_i -> Integer

C 言語での終了ステータス表現の整数を返します。

to_int -> Integer

to_i と同じです。

to_s -> String

to_i.to_s と同じです。

継承したメソッド

! != __id__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined !~ <=> === =~ __send__ _dump class clone define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? singleton_class singleton_method singleton_methods taint tainted? tap to_a to_ary to_hash to_io to_proc to_regexp to_str trust untaint untrust untrusted? .new .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE