UNIX のプロセスを管理するモジュール。Process.exit!, Process.fork 以外のメソッドは全てモジュール関数 (Module#module_function)です。
Process
がプロセスを表現するクラスではなく、プロセスに対する操作
をまとめたモジュールであることに注意してください。
Process.egid
カレントプロセスの実効グループ ID を返します。
Process.egid=gid
カレントプロセスの実効グループ ID を設定します。gid を返します。
Process.euid
カレントプロセスの実効ユーザ ID を返します。
Process.euid=uid
カレントプロセスの実効ユーザ ID を設定します。uid を返します。
Process.gid
カレントプロセスの実グループ ID を返します。
Process.gid=gid
カレントプロセスの実グループ ID を設定します。gid を返します。
Process.pid
カレントプロセスのプロセス ID を返します。変数 $$ の値と同じです。
Process.ppid
親プロセスのプロセス ID を返します。UN*X では実際の親プロセスが終
了した後は ppid
は 1 (init
の pid)になります。
Process.uid
プロセスの実ユーザ ID を返します。
Process.uid=uid
プロセスの実ユーザ ID を設定します。uid を返します。
Process.getpgid(pid)
Process.getpgrp([pid])
pid のプロセスのプロセスグループを返します。pid が 0 の時や省略された時はカレントプロセスを意味します。
プロセスグループの取得に失敗した場合は、例外 Errno::EXXX が 発生します。 *1。
Process.getpriority(which, who)
プロセス、プロセスグループ、ユーザの現在のプライオリティを返 します(getpriority(2) 参照)。
Process
モジュールは which として指定できる定数
PRIO_PROCESS, PRIO_PGRP,
PRIO_USER を定義しています。
who には、which の値にしたがってプロセス ID、プロセス グループ ID、ユーザ ID のいずれかを指定します。
プライオリティの取得に失敗した場合は、例外 Errno::EXXX が発 生します。
Process.kill(signal, pid ... )
pid で指定されたプロセスにシグナルを送ります。signal
はシグナル番号か名前(文字列またはSymbol)で指定します。負の値
を持つシグナル(あるいはシグナル名の前に-
)を与えるとプロセス
ではなくプロセスグループにシグナルを送ります。
全てのシグナル送信に成功した場合、指定した pid の数を返します。 失敗した場合は例外 Errno::EXXX が発生します。
存在しないシグナルを指定した場合は、例外 ArgumentError が発 生します*2
Process.setpgrp(pid, pgrp)
Process.setpgrp ((<ruby 1.7 feature>))
Process.setpgid(pid, pgrp)
pid のプロセスグループを設定します。pid が 0 の時はカ レントプロセスを意味します。
プロセスグループの設定に成功した場合は 0 を返します。失敗した場合 は、例外 Errno::EXXX が発生します。
ruby 1.7 feature: version 1.7 では、Process.setpgrp は、引数を取りません。
Process.setpriority(which, who, prio)
プロセス、プロセスグループ、ユーザの現在のプライオリティを設 定します(setpriority(2) 参照)。
Process
モジュールは which として指定できる定数
PRIO_PROCESS, PRIO_PGRP,
PRIO_USER を定義しています。
who には、which の値にしたがってプロセス ID、プロセス グループ ID、ユーザ ID のいずれかを指定します。
prio には、-20 から 20 の値を設定します。
プライオリティの設定に成功した場合は 0 を返します。失敗した場合は、 例外 Errno::EXXX が発生します。
Process.setsid()
新しいセッションを作成して、tty を切り離します。デーモンを簡単に作 ることができます。セッション ID を返します。
セッション ID の作成に失敗した場合は、例外 Errno::EXXX が発 生します。
Process.times ((<ruby 1.7 feature>))
自身のプロセスとその子プロセスが消費したユーザ/システム CPU 時間の
積算を Struct::Tms のオブジェクトとして返します。
Struct::Tms
は以下のメンバを持つ構造体クラスです。
utime # user time stime # system time cutime # user time of children cstime # system time of children
時間の単位は秒で、浮動小数点数で与えられます。詳細は times(3) を参照してください。
Process.wait
Process.wait2
子プロセスが終了するのを待ち、終了した子プロセスの pid を返します。 子プロセスが一つもなければ例外 Errno::ECHILD が 発生します。
wait2
は、その戻り値が pid と $? の配列であ
る点だけが異なります。
ruby 1.7 feature:
version 1.7 からは $?
はProcess::Status オブジェクトで
す。
Process.waitall ((<ruby 1.7 feature>))
全ての子プロセスが終了するのを待ちます。
終了した子プロセスの pid と終了ステータス(Process::Status)の 配列を要素に持つ配列を返します。子プロセスがいない状態でこのメソッ ドを呼び出すと空の配列を返します。
$? には最後に終了した子プロセスの終了ステータスが 設定されます。
例:
3.times {|n| Process.fork() { exit n } } p ret = Process.waitall p ret[-1][1] , ret[-1][1].type p $? , $?.type => [[5245, 256], [5244, 0], [5243, 512]] 512 Process::Status 512 Process::Status
Process.waitpid(pid[, flags])
Process.waitpid2(pid[, flags])
pid で指定される特定の子プロセスの終了を待ち、そのプロセスが
終了した時に pid
を返します。子プロセスが存在しなければ例外
Errno::ECHILD が発生します。
flags には、Process
モジュールの定数
WNOHANG(ノンブロッキングモード)と
WUNTRACED の論理和を指定します。省略したときの値は 0
です。
ノンブロッキングモードで子プロセスがまだ終了していない時には
nil
を返します。waitpid(2) か
wait4(2) の実装されていないマシンでは
flags はいつも nil
または 0 を指定する必要があります。
waitpid2
は、その戻り値が pid と $? の配列
である点だけが異なります。
ruby 1.7 feature:
version 1.7 からは $?
は Process::Status オブジェクト
です。
PRIO_PROCESS
Process.getpriority または Process.setpriority のプロセスプライオリティ指定。
PRIO_PGRP
プロセスグループプライオリティ。
PRIO_USER
ユーザプライオリティ。
WNOHANG
Process#waitpid の第二引数に指定するフラグで
す。終了した子プロセスがない時に waitpid
がブロックしません。
WUNTRACED
Process#waitpid の第二引数に指定するフラグで
す。子プロセスの停止によりステータスを報告していない子プロセスがあ
る時に waitpid
がブロックしません。
Status ((<ruby 1.7 feature>))
プロセスの終了ステータスを表現するクラスです。 Process::Status を参照してください。
*1あらい 2002-01-14: 1.6.7 までは、getpgid() は例外を発生させていません
p Process.getpgid(1000000) # => -1
*2なお、Windows (mswin32, mingw32)では、INT
ILL FPE SEGV TERM BREAK ABRT しか指定できません。ruby 1.7 feature
KILL も指定できます