要約
プロセスの終了ステータスを表すクラスです。メソッド 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 'Kernel#sleep'
child 12965 was stopped by signal 19
interrupted by signal 17 at -:30:in 'Kernel#sleep'
child 12965 was killed by signal 15
interrupted by signal 17 at -:30:in 'Kernel#sleep'
child 12964 exited normally. status=0
done
目次
- 特異メソッド
- インスタンスメソッド
特異メソッド
wait(pid = -1, flags = 0) -> Process::Status | nilRuby 3.0 から[permalink][rdoc][edit]-
Process.#wait と同じですが、プロセス ID ではなく Process::Status を返します。
pid と flags の意味は Process.#wait と同じです。
子プロセスがない場合は、実在しないプロセスを表す「空の」 Process::Status を返します。この場合 Process::Status#pid は -1 になります。
Process.#wait と異なり、$? は更新されません。
すべてのプラットフォームで使えるわけではありません。
- [PARAM]
pid: - 待機する子プロセスのプロセス ID を指定します。指定できる値は Process.#wait と同じです。
- [PARAM]
flags: - Process::WNOHANG などを指定します。指定できる値は Process.#wait と同じです。
- [RETURN]
- flags に Process::WNOHANG を指定していて、子プロセスがまだ終了していない場合は nil を返します。
例: 子プロセスがない場合pid = fork { exit 1 } status = Process::Status.wait(pid) p status.class # => Process::Status p status.exitstatus # => 1 # Process.wait と違い $? は更新されない p $? # => nilp Process::Status.wait # => #<Process::Status: pid -1 exit 0>[SEE_ALSO] Process.#wait, Process.#wait2
- [PARAM]
インスタンスメソッド
self & other -> IntegerRuby 4.0 で削除[permalink][rdoc][edit]-
self.to_i & other と同じです。このメソッドは後方互換性のためにあります。このメソッドは Ruby 3.3 から deprecated であり、Ruby 4.0 で削除されました。
- [PARAM]
other: - 自身との & 演算をしたい整数を指定します。
- [PARAM]
self == other -> bool[permalink][rdoc][edit]-
同じステータスの場合に真を返します。
other が数値の場合、self.to_i との比較が行われます。これは後方互換性のためです。
- [PARAM]
other: - 自身と比較したいオブジェクトを指定します。
- [PARAM]
self >> num -> IntegerRuby 4.0 で削除[permalink][rdoc][edit]-
self.to_i >> num と同じです。このメソッドは Ruby 3.3 から deprecated であり、Ruby 4.0 で削除されました。
- [PARAM]
num: - 整数を指定します。
p fork { exit 99 } #=> 26563 p Process.wait #=> 26563 p $?.to_i #=> 25344 p $? >> 8 #=> 99 - [PARAM]
coredump? -> bool[permalink][rdoc][edit]-
終了時にコアダンプしていたら真を返します。
このメソッドは signaled? が真のときにしか意味を持ちません。
このメソッドはシステムに依存します。サポートしないプラットフォームでは常に false を返します。
exited? -> bool[permalink][rdoc][edit]-
プロセスが exit(2) などにより正常に終了した場合に、真を返します。そうでない場合に false を返します。
exitstatus -> Integer | nil[permalink][rdoc][edit]-
exited? が真の場合プロセスが返した終了ステータスの整数を、そうでない場合は nil を返します。
inspect -> String[permalink][rdoc][edit]-
自身を人間が読みやすい形の文字列表現にして返します。
プロセスの状態を以下のフォーマットで返します。
- 正常終了のとき
-
#<Process::Status: pid=18262,exited(nnn)>
- シグナルによる停止のとき
-
#<Process::Status: pid=18262,stopped(SIGxxx=nnn)>
- シグナルによる終了のとき
-
#<Process::Status: pid=18262,signaled(SIGxxx=nnn)>
- コアダンプしたとき(このステータスの表示はシステムに依存します)
-
#<Process::Status: pid=18262,coredumped>
pid -> Integer[permalink][rdoc][edit]-
終了したプロセスのプロセス ID を返します。
signaled? -> bool[permalink][rdoc][edit]-
プロセスがハンドラを定義していないシグナルを受けて終了した場合に真を返します。
stopped? -> bool[permalink][rdoc][edit]-
プロセスが現在停止(終了ではない)している場合に真を返します。 Process.#waitpid に Process::WUNTRACED フラグを設定した場合にだけ真になりえます。
stopsig -> Integer | nil[permalink][rdoc][edit]-
stopped? が真の場合そのシグナルの番号を、そうでない場合は nil を返します。
success? -> bool[permalink][rdoc][edit]-
プロセスの終了状態が成功である場合に true を返します。そうでない場合に false を返します。
termsig -> Integer | nil[permalink][rdoc][edit]-
signaled? が真の場合プロセスを終了させたシグナル番号を、そうでない場合は nil を返します。
to_i -> Integer[permalink][rdoc][edit]-
C 言語での終了ステータス表現の整数を返します。
多くのシステムの実装では、この値の上位 8 bit に exit(2) に渡した終了ステータスが、下位 8 bit にシグナル等で終了した等の情報が入っています。
to_s -> String[permalink][rdoc][edit]-
to_i.to_s と同じです。