Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > 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.#waitpid に Process::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 と同じです。 |