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

module Process::Status

クラスの継承リスト: Process::Status

要約

プロセスの終了ステータスを表すクラスです。 メソッド 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 -> nil | Integer

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

inspect -> String

プロセスの状態を以下のフォーマットで返します。

pid -> Integer

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

signaled? -> bool

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

stopped? -> bool

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

stopsig -> nil | Integer

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

success? -> bool

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

termsig -> nil | Integer

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

to_i -> Integer

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

to_int -> Integer

to_i と同じです。

to_s -> String

to_i.to_s と同じです。