Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Processモジュール
クラスの継承リスト: Process
UNIX のプロセスを管理するモジュールです。
Process がプロセスを表現するクラスではなく、プロセスに対する操作 をまとめたモジュールであることに注意してください。
ユーザ ID・グループ ID を操作するシステムコールを直接呼ぶために Process::Sys が提供されています。 ポータブルにユーザ ID・グループ ID を操作するためのモジュール Process::UID, Process::GID も提供されています。
abort(message = "") -> ()
[permalink][rdoc]関数 Kernel.#abort と同じです。
exec(command, *args) -> ()
[permalink][rdoc]カレントプロセスを与えられた外部コマンドで置き換えます。
引数が一つだけ与えられた場合、command が shell のメタ文字
* ? {} [] <> () ~ & | \ $ ; ' ` " \n
を含む場合、shell 経由で実行されます。 そうでなければインタプリタから直接実行されます。
引数が複数与えられた場合、第 2 引数以降は command に直接渡され、 インタプリタから直接実行されます。
第 1 引数が 2 要素の配列の場合、第 1 要素の文字列が実際に起動する プログラムのパスで、第 2 要素が「みせかけ」のプログラム名になります。
MSDOS 環境の場合、command はサブシェル経由で実行されます。 そうでない場合、command は exec(2) を使用して実行されるので元の プログラムからいくつかの環境を引き継ぎます。
exec "echo *" # echoes list of files in current directory # never get here exec "echo", "*" # echoes an asterisk # never get here
exit(status = true) -> ()
[permalink][rdoc]プロセスを終了します。関数 Kernel.#exit と同じです。
[SEE_ALSO] exit(3)
exit!(status = false) -> ()
[permalink][rdoc]関数 Kernel.#exit! と同じです。
[SEE_ALSO] _exit(2)
fork -> Integer | nil
[permalink][rdoc]fork { ... } -> Integer | nil
子プロセスを生成します。関数 Kernel.#fork と同じです。
[SEE_ALSO] fork(2)
spawn(cmd, *arg) -> Integer
[permalink][rdoc]関数 Kernel.#spawn と同じです。
daemon(nochdir = nil, noclose = nil) -> 0
[permalink][rdoc]プロセスから制御端末を切り離し、 バックグラウンドにまわってデーモンとして動作させます。
カレントディレクトリを / に移動します。 ただし nochdir に真を指定したときにはこの動作は抑制され、 カレントディレクトリは移動しません。
標準入力・標準出力・標準エラー出力を /dev/null にリダイレクトします。 ただし noclose に真を指定したときにはこの動作は抑制され、 リダイレクトは行なわれません。
detach(pid) -> Thread
[permalink][rdoc]子プロセス pid の終了を監視するスレッドを生成して返します。 生成したスレッドは子プロセスが終了した後に終了ステータス (Process::Status) を返します。 指定した子プロセスが存在しなければ即座に nil で終了します。
pid = fork { # child sleep 3 } p pid # => 7762 th = Process.detach(pid) p th.value # => #<Process::Status: pid 7762 exit 0>
egid -> Integer
[permalink][rdoc]カレントプロセスの実効グループ ID を整数で返します。
[SEE_ALSO] getegid(2)
egid=(gid)
[permalink][rdoc]カレントプロセスの実効グループ ID を gid に設定します。
動作の詳細はプラットフォームに依存します。 実効グループ ID 以外のグループ ID も変更されるかも知れません。
[SEE_ALSO] Process::GID.#eid=
euid -> Integer
[permalink][rdoc]カレントプロセスの実効ユーザ ID を整数で返します。
[SEE_ALSO] geteuid(2)
euid=(uid)
[permalink][rdoc]カレントプロセスの実効ユーザ ID を uid に設定します。
動作の詳細はプラットフォームに依存します。 実効ユーザ ID 以外のユーザ ID も変更されるかも知れません。
[SEE_ALSO] Process::UID.#eid=
getpgid(pid) -> Integer
[permalink][rdoc]プロセス ID が pid であるプロセスのプロセスグループ ID を整数で返します。
[SEE_ALSO] getpgid(2)
getpgrp -> Integer
[permalink][rdoc]現在のプロセスのプロセスグループ ID を整数で返します。
[SEE_ALSO] getpgrp(2)
getpriority(which, who) -> Integer
[permalink][rdoc]which に従いプロセス、プロセスグループ、ユーザのいずれかの現在のプライオリティを整数で返します。
[SEE_ALSO] getpriority(2)
getrlimit(resource) -> [Integer]
[permalink][rdoc]カレントプロセスでのリソースの制限値を、整数の配列として返します。 返り値は、現在の制限値 cur_limit と、制限値として設定可能な最大値 max_limit の 配列 [cur_limit, max_limit] です。
それぞれの limit が Process::RLIM_INFINITY と等しい場合、リソースに制限がないことを意味します。
引数 resource で有効な定数は以下のとおりです。
core ファイルのサイズ (バイト) (SUSv3)
プロセスの CPU 時間 (秒) (SUSv3)
プロセスのデータ領域のサイズ (バイト) (SUSv3)
プロセスが生成するファイルのサイズ (バイト) (SUSv3)
プロセスがオープンできるファイルの数 (SUSv3)
プロセスのスタック領域のサイズ (バイト) (SUSv3)
プロセスの仮想メモリサイズ (バイト) (SUSv3, NetBSD, FreeBSD, OpenBSD but 4.4BSD-Lite))
mlock(2) でロックできるトータルのサイズ (バイト) (4.4BSD, GNU/Linux)
そのユーザのプロセスの最大数 (4.4BSD, GNU/Linux)
使用できる実メモリの最大サイズ (バイト) (4.2BSD, GNU/Linux)
ソケットバッファのサイズ (バイト) (NetBSD, FreeBSD)
例:
include Process p lim = getrlimit(RLIMIT_STACK) #=> [8388608, 18446744073709551615] p lim.map{|i| i == RLIM_INFINITY ? "unlimited" : "#{i/(1024**2)}MB" } #=> ["8MB", "unlimited"]
[SEE_ALSO] Process.#setrlimit, getrlimit(2)
gid -> Integer
[permalink][rdoc]カレントプロセスの実グループ ID を返します。
[SEE_ALSO] getgid(2)
gid=(gid)
[permalink][rdoc]カレントプロセスの実グループ ID を gid に設定します。
動作の詳細はプラットフォームに依存します。 実グループ ID 以外のグループ ID も変更されるかも知れません。
[SEE_ALSO] Process::GID
groups -> [Integer]
[permalink][rdoc]補助グループ ID の配列を返します(実効グループ ID を含むかも知れません)。
返される配列の最大要素数は Process.#maxgroups です。
[SEE_ALSO] getgroups(2)
groups=(gids)
[permalink][rdoc]補助グループを設定します。
root だけがこのメソッドを呼ぶことができます。
[SEE_ALSO] setgroups(2)
initgroups(user, group) -> [Integer]
[permalink][rdoc]user が属するグループのリストを更新し、group をそのリストに加えます。
このメソッドを呼ぶには root 権限が必要です。
kill(signal, pid, *rest) -> Integer
[permalink][rdoc]pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号か名前(文字列またはSymbol)で指定します。 全てのシグナル送信に成功した場合、指定した pid の総数を返します。
[SEE_ALSO] Kernel.#trap, kill(2)
maxgroups -> Integer
[permalink][rdoc]maxgroups=(num)
設定できる補助グループ ID の数を指定します。
実際に返される補助グループ ID の数よりも少ない値を設定していると、 Process.#groups で例外が発生します。
pid -> Integer
[permalink][rdoc]カレントプロセスのプロセス ID を返します。変数 $$ の値と同じです。
[SEE_ALSO] getpid(2)
ppid -> Integer
[permalink][rdoc]親プロセスのプロセス ID を返します。UNIX では実際の親プロセスが終 了した後は ppid は 1 (initの pid)になります。
[SEE_ALSO] getppid(2)
setpgid(pid, pgrp) -> 0
[permalink][rdoc]プロセス ID が pid であるプロセスのプロセスグループを pgrp に設定します。
[SEE_ALSO] setpgid(2)
setpgrp -> 0
[permalink][rdoc]カレントプロセスの ID と同じ ID をもつプロセスグループを作成し、カレントプロセスをそのリーダーにします。 Process.#setpgid(0, 0) と同じです。
fork do p [Process.pid, Process.getpgrp] p Process.setpgrp p [Process.pid, Process.getpgrp] end Process.wait #=> [3427, 3426] 0 [3427, 3427]
[SEE_ALSO] setpgrp(2)
setpriority(which, who, prio) -> 0
[permalink][rdoc]プロセス、プロセスグループ、 ユーザのいずれかの現在のプライオリティを設定します 。プライオリティの設定に成功した場合は 0 を返します。
以下の例は呼び出したプロセス自身のプライオリティを 10 に下げます。 すでに 10 よりもプライオリティが低く、 Errno::EACCES となった場合には無視して実行を続けます。
begin Process.setpriority(Process::PRIO_PROCESS, 0, 10) rescue Errno::EACCES end
[SEE_ALSO] setpriority(2)
setrlimit(resource, cur_limit, max_limit) -> nil
[permalink][rdoc]setrlimit(resource, limit) -> nil
カレントプロセスでのリソースの制限値を設定します。
引数 resource で有効な定数は以下のとおりです。
core ファイルのサイズ (バイト) (SUSv3)
プロセスの CPU 時間 (秒) (SUSv3)
プロセスのデータ領域のサイズ (バイト) (SUSv3)
プロセスが生成するファイルのサイズ (バイト) (SUSv3)
プロセスがオープンできるファイルの数 (SUSv3)
プロセスのスタック領域のサイズ (バイト) (SUSv3)
プロセスの仮想メモリサイズ (バイト) (SUSv3, NetBSD, FreeBSD, OpenBSD but 4.4BSD-Lite))
mlock(2) でロックできるトータルのサイズ (バイト) (4.4BSD, GNU/Linux)
そのユーザのプロセスの最大数 (4.4BSD, GNU/Linux)
使用できる実メモリの最大サイズ (バイト) (4.2BSD, GNU/Linux)
ソケットバッファのサイズ (バイト) (NetBSD, FreeBSD)
引数 limit, cur_limit, max_limit で有効な定数は以下のとおりです。
以下の例は RLIMIT_CORE の制限を hard limit (max limit) まで引き上げ、可能なら core を残すようにします。
Process.setrlimit(Process::RLIMIT_CORE, Process.getrlimit(Process::RLIMIT_CORE)[1])
[SEE_ALSO] setrlimit(2)
setsid -> Integer
[permalink][rdoc]新しいセッションを作成して、tty を切り離します。デーモンを簡単に作 ることができます。セッション ID を返します。
[SEE_ALSO] setsid(2)
times -> Struct::Tms
[permalink][rdoc]自身のプロセスとその子プロセスが消費したユーザ/システム CPU 時間の積算を Struct::Tms オブジェクトで返します。 時間の単位は秒で、浮動小数点数で与えられます。
[SEE_ALSO] Struct::Tms
uid -> Integer
[permalink][rdoc]プロセスの実ユーザ ID を返します。
[SEE_ALSO] getuid(2)
uid=(id)
[permalink][rdoc]プロセスの実ユーザ ID を id に設定します。
動作の詳細はプラットフォームに依存します。 実ユーザ ID 以外のユーザ ID も変更されるかも知れません。
[SEE_ALSO] Process::UID
wait -> Integer
[permalink][rdoc]wait2 -> [Integer, Process::Status]
子プロセスのうちのひとつが終了するまで待ち、終了した子プロセスの pid を返します。 wait2 は子プロセスの pid と終了ステータスを表す Process::Status オブジェクトの配列を返します。
$? に終了した子プロセスの Process::Status オブジェクトがセットされます。
pid = fork{ sleep 1 } Process.wait2 #=> [2756, #<Process::Status: pid=2756,exited(0)>]
[SEE_ALSO] wait(2)
waitall -> [[Integer, Process::Status]]
[permalink][rdoc]全ての子プロセスが終了するのを待ちます。 終了した子プロセスの pid と終了ステータス (Process::Status) の配列の配列を返します。 子プロセスがいない状態でこのメソッドを呼び出すと空の配列を返します。
$? には最後に終了した子プロセスの Process::Status オブジェクトが設定されます。
2.times {|n| Process.fork() { exit n } } p Process.waitall #=> [[2766, #<Process::Status: pid=2766,exited(1)>], [2765, #<Process::Status: pid=2765,exited(1)>]]
waitpid(pid, flags = 0) -> Integer | nil
[permalink][rdoc]waitpid2(pid, flags = 0) -> [Integer, Process::Status] | nil
pid で指定される特定の子プロセスの終了を待ち、そのプロセスが 終了した時に pid を返します。 waitpid2 は pid と Process::Status オブジェクトの配列を返します。 ノンブロッキングモードで子プロセスがまだ終了していない時には nil を返します。
$? に終了した子プロセスの Process::Status オブジェクトがセットされます。
[SEE_ALSO] waitpid(2)
PRIO_PGRP -> Fixnum
[permalink][rdoc]対象とするプライオリティがプロセスグループプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
PRIO_PROCESS -> Fixnum
[permalink][rdoc]対象とするプライオリティがプロセスプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
PRIO_USER -> Fixnum
[permalink][rdoc]対象とするプライオリティがユーザプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
RLIMIT_AS -> Fixnum
[permalink][rdoc]リソースの種類がプロセスの仮想メモリサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_CORE -> Fixnum
[permalink][rdoc]リソースの種類が core ファイルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_CPU -> Fixnum
[permalink][rdoc]リソースの種類がプロセスの CPU 時間であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_DATA -> Fixnum
[permalink][rdoc]リソースの種類がプロセスのデータ領域のサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_FSIZE -> Fixnum
[permalink][rdoc]リソースの種類がプロセスが生成するファイルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_MEMLOCK -> Fixnum
[permalink][rdoc]リソースの種類が mlock(2) でロックできるトータルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_NOFILE -> Fixnum
[permalink][rdoc]リソースの種類がプロセスがオープンできるファイルの数であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_NPROC -> Fixnum
[permalink][rdoc]リソースの種類がユーザのプロセスの最大数であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_RSS -> Fixnum
[permalink][rdoc]リソースの種類が使用できる実メモリの最大サイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_SBSIZE -> Fixnum
[permalink][rdoc]リソースの種類がソケットバッファのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIMIT_STACK -> Fixnum
[permalink][rdoc]リソースの種類がプロセスのスタック領域のサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。 システムによっては定義されていません。
RLIM_INFINITY -> Integer
[permalink][rdoc]リソースに制限がないことを意味する定数です。
Process.#getrlimit、Process.#setrlimit で使われます。
RLIM_SAVED_CUR -> Integer
[permalink][rdoc]Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。
RLIM_SAVED_MAX -> Integer
[permalink][rdoc]Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。
WNOHANG -> Fixnum
[permalink][rdoc]Process.#waitpid の第二引数に指定するフラグです。 終了した子プロセスがない時でも waitpid がブロックしません。
WUNTRACED -> Fixnum
[permalink][rdoc]Process.#waitpid の第二引数に指定するフラグです。 このフラグが指定された場合、waitpid は停止しているだけで 終了していない子プロセスのプロセス ID も返すようになります。 trace されている子プロセスの ID は返しません。
include Process pid = fork{ Process.kill('SIGSTOP', Process.pid) } p pid #=> 4336 p waitpid2(pid, WUNTRACED) #=> [4336, #<Process::Status: pid=4336,stopped(SIGSTOP=19)>]
[SEE_ALSO] waitpid(2)