要約
UNIX のプロセスを管理するモジュールです。
Process がプロセスを表現するクラスではなく、プロセスに対する操作をまとめたモジュールであることに注意してください。
ユーザ ID・グループ ID を操作するシステムコールを直接呼ぶために Process::Sys が提供されています。ポータブルにユーザ ID・グループ ID を操作するためのモジュール Process::UID, Process::GID も提供されています。
目次
- 特異メソッド
- モジュール関数
- 定数
-
- CLOCK_BOOTTIME
- CLOCK_BOOTTIME_ALARM
- CLOCK_MONOTONIC
- CLOCK_MONOTONIC_COARSE
- CLOCK_MONOTONIC_FAST
- CLOCK_MONOTONIC_PRECISE
- CLOCK_MONOTONIC_RAW
- CLOCK_MONOTONIC_RAW_APPROX
- CLOCK_PROCESS_CPUTIME_ID
- CLOCK_PROF
- CLOCK_REALTIME
- CLOCK_REALTIME_ALARM
- CLOCK_REALTIME_COARSE
- CLOCK_REALTIME_FAST
- CLOCK_REALTIME_PRECISE
- CLOCK_SECOND
- CLOCK_THREAD_CPUTIME_ID
- CLOCK_UPTIME
- CLOCK_UPTIME_FAST
- CLOCK_UPTIME_PRECISE
- CLOCK_UPTIME_RAW
- CLOCK_UPTIME_RAW_APPROX
- CLOCK_VIRTUAL
- PRIO_PGRP
- PRIO_PROCESS
- PRIO_USER
- RLIM_INFINITY
- RLIM_SAVED_CUR
- RLIM_SAVED_MAX
- RLIMIT_AS
- RLIMIT_CORE
- RLIMIT_CPU
- RLIMIT_DATA
- RLIMIT_FSIZE
- RLIMIT_MEMLOCK
- RLIMIT_NOFILE
- RLIMIT_NPROC
- RLIMIT_RSS
- RLIMIT_SBSIZE
- RLIMIT_STACK
- WNOHANG
- WUNTRACED
特異メソッド
abort -> ()
[permalink][rdoc][edit]abort(message) -> ()
-
関数 Kernel.#abort と同じです。
- [PARAM] message:
- 終了時のメッセージを文字列で指定します。
exec(command, *args) -> ()
[permalink][rdoc][edit]-
カレントプロセスを与えられた外部コマンドで置き換えます。
引数の解釈
引数が一つだけ与えられた場合、command が shell のメタ文字
* ? {} [] <> () ~ & | \ $ ; ' ` " \n
を含む場合、shell 経由で実行されます。そうでなければインタプリタから直接実行されます。
引数が複数与えられた場合、第 2 引数以降は command に直接渡され、インタプリタから直接実行されます。
第 1 引数が 2 要素の配列の場合、第 1 要素の文字列が実際に起動するプログラムのパスで、第 2 要素が「みせかけ」のプログラム名になります。
MSDOS 環境の場合、command はサブシェル経由で実行されます。そうでない場合、command は exec(2) を使用して実行されるので元のプログラムからいくつかの環境を引き継ぎます。
- [PARAM] command:
- 実行する外部コマンド。
- [PARAM] args:
- command に渡す引数。
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][edit]-
プロセスを終了します。関数 Kernel.#exit と同じです。
- [PARAM] status:
- 終了ステータスを boolean か整数で指定します。true の場合は成功を、false は失敗を意味します。
[SEE_ALSO] exit(3)
exit!(status = false) -> ()
[permalink][rdoc][edit]-
関数 Kernel.#exit! と同じです。
- [PARAM] status:
- 終了ステータスを boolean か整数で指定します。true の場合は成功を、false は失敗を意味します。
[SEE_ALSO] _exit(2)
fork -> Integer | nil
[permalink][rdoc][edit]fork { ... } -> Integer | nil
-
子プロセスを生成します。関数 Kernel.#fork と同じです。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] fork(2)
last_status -> Process::Status | nil
[permalink][rdoc][edit]-
カレントスレッドで最後に終了した子プロセスのステータスを返します。
変数 $? の値と同じです。
Process.wait Process.spawn("ruby", "-e", "exit 13") Process.last_status # => #<Process::Status: pid 4825 exit 13>
カレントスレッドで子プロセスを実行したことがない場合は nil を返します。
Process.last_status # => nil
[SEE_ALSO] Process::Status
[SEE_ALSO] $?
spawn(cmd, *arg) -> Integer
[permalink][rdoc][edit]-
関数 Kernel.#spawn と同じです。
- [PARAM] cmd:
- Kernel.#spawn と同じです。
- [PARAM] arg:
- Kernel.#spawn と同じです。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
モジュール関数
argv0 -> String
[permalink][rdoc][edit]-
現在実行中の Ruby スクリプトの名前を表す文字列です。$0 を更新しても本メソッドの戻り値への影響はありません。
本メソッドは 2.1 以降でグローバル変数を用いないで現在実行中の Ruby スクリプトの名前を表す文字列を取得する手段として提供されました。
[SEE_ALSO] Process.#setproctitle, $0
clock_gettime(clock_id, unit=:float_second) -> Float | Integer
[permalink][rdoc][edit]-
POSIX の clock_gettime() 関数の時間を返します。
例:
p Process.clock_gettime(Process::CLOCK_MONOTONIC) #=> 896053.968060096
- [PARAM] clock_id:
- クロックの種類を以下の定数のいずれかで指定します。サポートされている定数は OS やバージョンに依存します。
- Process::CLOCK_REALTIME
-
SUSv2 to 4, Linux 2.5.63, FreeBSD 3.0, NetBSD 2.0, OpenBSD 2.1, macOS 10.12
- Process::CLOCK_MONOTONIC
-
SUSv3 to 4, Linux 2.5.63, FreeBSD 3.0, NetBSD 2.0, OpenBSD 3.4, macOS 10.12
- Process::CLOCK_PROCESS_CPUTIME_ID
-
SUSv3 to 4, Linux 2.5.63, OpenBSD 5.4, macOS 10.12
- Process::CLOCK_THREAD_CPUTIME_ID
-
SUSv3 to 4, Linux 2.5.63, FreeBSD 7.1, OpenBSD 5.4, macOS 10.12
- Process::CLOCK_VIRTUAL
-
FreeBSD 3.0, OpenBSD 2.1
- Process::CLOCK_PROF
-
FreeBSD 3.0, OpenBSD 2.1
- Process::CLOCK_REALTIME_FAST
-
FreeBSD 8.1
- Process::CLOCK_REALTIME_PRECISE
-
FreeBSD 8.1
- Process::CLOCK_REALTIME_COARSE
-
Linux 2.6.32
- Process::CLOCK_REALTIME_ALARM
-
Linux 3.0
- Process::CLOCK_MONOTONIC_FAST
-
FreeBSD 8.1
- Process::CLOCK_MONOTONIC_PRECISE
-
FreeBSD 8.1
- Process::CLOCK_MONOTONIC_COARSE
-
Linux 2.6.32
- Process::CLOCK_MONOTONIC_RAW
-
Linux 2.6.28, macOS 10.12
- Process::CLOCK_MONOTONIC_RAW_APPROX
-
macOS 10.12
- Process::CLOCK_BOOTTIME
-
Linux 2.6.39
- Process::CLOCK_BOOTTIME_ALARM
-
Linux 3.0
- Process::CLOCK_UPTIME
-
FreeBSD 7.0, OpenBSD 5.5
- Process::CLOCK_UPTIME_FAST
-
FreeBSD 8.1
- Process::CLOCK_UPTIME_RAW
-
macOS 10.12
- Process::CLOCK_UPTIME_RAW_APPROX
-
macOS 10.12
- Process::CLOCK_UPTIME_PRECISE
-
FreeBSD 8.1
- Process::CLOCK_SECOND
-
FreeBSD 8.1
SUS は Single Unix Specification を意味しており、 SUS は POSIX と POSIX の一部で定義されている clock_gettime を含みます。 SUS では CLOCK_REALTIME は必須ですが、CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID は任意です。
さらに clock_id はいくつかのシンボルを受け付けます。それらは clock_gettime() をエミュレーションします。
たとえば、Process::CLOCK_REALTIME は clock_gettime() がない場合は :GETTIMEOFDAY_BASED_CLOCK_REALTIME と定義されています。
CLOCK_REALTIME のエミュレーション:
- :GETTIMEOFDAY_BASED_CLOCK_REALTIME
-
SUS で定義されている gettimeofday() を使います。 (しかし SUSv4 で obsoleted になっています) 精度は1マイクロ秒です。
- :TIME_BASED_CLOCK_REALTIME
-
ISO C で定義されている time() を使います。精度は1秒です。
CLOCK_MONOTONIC のエミュレーション:
- :MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC
-
Darwin で利用可能な mach_absolute_time() を使います。精度は CPU に依存します。
- :TIMES_BASED_CLOCK_MONOTONIC
-
POSIX で定義されている times() の結果を使います。 POSIX では「times() は過去のある時点 (例えばシステムの起動時刻) からの経過クロック数 (clock tick) で実際に経過時間を返します」と定義されています。例えば GNU/Linux では jiffies に基づいた値を返し、monotonic (単調増加が保証されていて、巻き戻ったりしない) です。しかし 4.4BSD では gettimeofday() を使い、monotonic ではありません。 (ただし FreeBSD では clock_gettime(CLOCK_MONOTONIC) を代わりに使います。) 精度はクロック数 (clock tick) です。「getconf CLK_TCK」コマンドで1秒あたりのクロック数を表示できます。 (古いシステムでは、1秒あたりのクロック数は HZ マクロで定義されています。) もし1秒あたりのクロック数が 100 かつ clock_t が32ビット整数型の場合、精度は10ミリ秒で497日以上を表すことはできません。
CLOCK_PROCESS_CPUTIME_ID のエミュレーション:
- :GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID
-
SUS で定義されている getrusage() を使います。 getrusage() を RUSAGE_SELF と一緒に使うと、(子プロセスの時間をのぞいた) getrusage() を呼び出したプロセスだけの CPU 時間が得られます。ユーザー時間 (ru_utime) とシステム時間 (ru_stime) を足した結果を返します。精度は1マイクロ秒です。
- :TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID
-
POSIX で定義されている times() を使います。ユーザー時間 (tms_utime) と システム時間 (tms_stime) を足した結果を返します。 tms_cutime と tms_cstime は子プロセスの時間を含みません。精度はクロック数 (clock tick) です。「getconf CLK_TCK」コマンドで1秒あたりのクロック数を表示できます。 (古いシステムでは、1秒あたりのクロック数は HZ マクロで定義されています。) もし1秒あたりのクロック数が100なら、精度は10ミリ秒です。
- :CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID
-
ISO C で定義されている clock() を使います。精度は 1/CLOCKS_PER_SEC です。 CLOCKS_PER_SEC は time.h で定義されているC言語のマクロです。 SUS では CLOCKS_PER_SEC は 1000000 と定義されています。ただし、Unix 以外のシステムでは異なる値に定義されているかもしれません。 SUS で定義されているように CLOCKS_PER_SEC が 1000000 なら、精度は1マイクロ秒です。 CLOCKS_PER_SEC が 1000000 かつ clock_t が32ビット整数型の場合、72分以上を表すことはできません。
- [PARAM] unit:
- 返値の型を指定します。
- :float_second
-
Float の秒 (デフォルト)
- :float_millisecond
-
Float のミリ秒
- :float_microsecond
-
Float のマイクロ秒
- :second
-
Integer の秒
- :millisecond
-
Integer のミリ秒
- :microsecond
-
Integer のマイクロ秒
- :nanosecond
-
Integer のナノ秒
基になる関数 clock_gettime() はナノ秒を返します。 Float オブジェクト (IEEE 754 double) は CLOCK_REALTIME の結果を表すには不十分です。正確なナノ秒が必要なら、unit に :nanosecond を使ってください。
返値のオリジン(0)は様々です。例えば、システムの起動時刻、プロセス起動時刻、エポックなどです。
CLOCK_REALTIME のオリジンはエポック (1970-01-01 00:00:00 UTC) と定義されています。しかし、システムによってうるう秒をカウントするかどうかが異なります。そのため、結果はシステムによって解釈が異なります。 CLOCK_REALTIME よりも Time.now をおすすめします。
- [EXCEPTION] Errno::EINVAL:
- clock_id がサポートされていない場合に発生します。
[SEE_ALSO] Time.now
daemon(nochdir = nil, noclose = nil) -> 0
[permalink][rdoc][edit]-
プロセスから制御端末を切り離し、バックグラウンドにまわってデーモンとして動作させます。
カレントディレクトリを / に移動します。ただし nochdir に真を指定したときにはこの動作は抑制され、カレントディレクトリは移動しません。
標準入力・標準出力・標準エラー出力を /dev/null にリダイレクトします。ただし noclose に真を指定したときにはこの動作は抑制され、リダイレクトは行なわれません。
- [PARAM] nochdir:
- true を指定した場合、カレントディレクトリを移動しません。
- [PARAM] noclose:
- true を指定した場合、標準入力・標準出力・標準エラー出力を変更しません。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
- [EXCEPTION] Errno::EXXX:
- 失敗した場合に発生します。
detach(pid) -> Thread
[permalink][rdoc][edit]-
子プロセス pid の終了を監視するスレッドを生成して返します。生成したスレッドは子プロセスが終了した後に終了ステータス (Process::Status) を返します。指定した子プロセスが存在しなければ即座に nil で終了します。
- [PARAM] pid:
- 子スレッドのプロセス ID を整数で指定します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
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][edit]-
カレントプロセスの実効グループ ID を整数で返します。
[SEE_ALSO] getegid(2)
egid=(gid)
[permalink][rdoc][edit]-
カレントプロセスの実効グループ ID を gid に設定します。
動作の詳細はプラットフォームに依存します。実効グループ ID 以外のグループ ID も変更されるかも知れません。
- [PARAM] gid:
- 実効グループ ID を整数で指定します。
- [EXCEPTION] Errno::EXXX:
- 権限がない場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] Process::GID.#eid=
euid -> Integer
[permalink][rdoc][edit]-
カレントプロセスの実効ユーザ ID を整数で返します。
[SEE_ALSO] geteuid(2)
euid=(uid)
[permalink][rdoc][edit]-
カレントプロセスの実効ユーザ ID を uid に設定します。
動作の詳細はプラットフォームに依存します。実効ユーザ ID 以外のユーザ ID も変更されるかも知れません。
- [PARAM] uid:
- 実効ユーザ ID を整数で指定します。
- [EXCEPTION] Errno::EXXX:
- 権限がない場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] Process::UID.#eid=
getpgid(pid) -> Integer
[permalink][rdoc][edit]-
プロセス ID が pid であるプロセスのプロセスグループ ID を整数で返します。
- [PARAM] pid:
- プロセス ID を整数で指定します。0 の時はカレントプロセス ID を指定したのと同じです。
- [EXCEPTION] Errno::EXXX:
- プロセスグループの取得に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] getpgid(2)
getpgrp -> Integer
[permalink][rdoc][edit]-
現在のプロセスのプロセスグループ ID を整数で返します。
- [EXCEPTION] Errno::EXXX:
- プロセスグループの取得に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] getpgrp(2)
getpriority(which, who) -> Integer
[permalink][rdoc][edit]-
which に従いプロセス、プロセスグループ、ユーザのいずれかの現在のプライオリティを整数で返します。
- [PARAM] which:
- プライオリティの種類を次の定数で指定します。 Process::PRIO_PROCESS, Process::PRIO_PGRP, Process::PRIO_USER。
- [PARAM] who:
- which の値にしたがってプロセス ID、プロセスグループ ID、ユーザ ID のいずれかを整数で指定します。
- [EXCEPTION] Errno::EXXX:
- プライオリティの取得に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] getpriority(2)
getrlimit(resource) -> [Integer]
[permalink][rdoc][edit]-
カレントプロセスでのリソースの制限値を、整数の配列として返します。返り値は、現在の制限値 cur_limit と、制限値として設定可能な最大値 max_limit の配列 [cur_limit, max_limit] です。
それぞれの limit が Process::RLIM_INFINITY と等しい場合、リソースに制限がないことを意味します。
- [PARAM] resource:
- リソースの種類を示す定数を指定します。指定できる定数はシステムに依存します。
- [EXCEPTION] Errno::EXXX:
- リソースの制限値の取得が失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
引数 resource で有効な定数は以下のとおりです。
- Process::RLIMIT_CORE
-
core ファイルのサイズ (バイト) (SUSv3)
- Process::RLIMIT_CPU
-
プロセスの CPU 時間 (秒) (SUSv3)
- Process::RLIMIT_DATA
-
プロセスのデータ領域のサイズ (バイト) (SUSv3)
- Process::RLIMIT_FSIZE
-
プロセスが生成するファイルのサイズ (バイト) (SUSv3)
- Process::RLIMIT_NOFILE
-
プロセスがオープンできるファイルの数 (SUSv3)
- Process::RLIMIT_STACK
-
プロセスのスタック領域のサイズ (バイト) (SUSv3)
- Process::RLIMIT_AS
-
プロセスの仮想メモリサイズ (バイト) (SUSv3, NetBSD, FreeBSD, OpenBSD but 4.4BSD-Lite))
- Process::RLIMIT_MEMLOCK
-
mlock(2) でロックできるトータルのサイズ (バイト) (4.4BSD, GNU/Linux)
- Process::RLIMIT_NPROC
-
そのユーザのプロセスの最大数 (4.4BSD, GNU/Linux)
- Process::RLIMIT_RSS
-
使用できる実メモリの最大サイズ (バイト) (4.2BSD, GNU/Linux)
- Process::RLIMIT_SBSIZE
-
ソケットバッファのサイズ (バイト) (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)
getsid(pid = 0) -> Integer
[permalink][rdoc][edit]-
引数 pid で指定されたプロセスのセッション ID を返します。
- [PARAM] pid:
- プロセス ID を整数で指定します。省略した場合、0 を指定した場合は現在のプロセスの ID を指定した場合と同じ動作になります。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
Process.getsid() # => 27422 Process.getsid(0) # => 27422 Process.getsid(Process.pid()) # => 27422
[SEE_ALSO] getsid(2)
gid -> Integer
[permalink][rdoc][edit]-
カレントプロセスの実グループ ID を返します。
[SEE_ALSO] getgid(2)
gid=(gid)
[permalink][rdoc][edit]-
カレントプロセスの実グループ ID を gid に設定します。
動作の詳細はプラットフォームに依存します。実グループ ID 以外のグループ ID も変更されるかも知れません。
- [PARAM] gid:
- 実グループ ID を整数で指定します。
- [EXCEPTION] Errno::EXXX:
- 権限がない場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] Process::GID
groups -> [Integer]
[permalink][rdoc][edit]-
補助グループ ID の配列を返します(実効グループ ID を含むかも知れません)。
返される配列の最大要素数は Process.#maxgroups です。
このメソッドは getgroups(2) の単純なラッパーです。このことは以下の特徴がプラットフォームに依存することを意味します。
- 結果がソートされているかどうか
- 結果が実効グループ ID を含むかどうか
- グループ ID が重複している可能性があるかどうか
ソート済みで重複のないグループ ID の配列の取得は以下のようにできます:
Process.groups.uniq.sort
- [EXCEPTION] Errno::EXXX:
- Process.#maxgroups が実際に返される補助グループ ID の数よりも少ない値を設定していると発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
Process.groups #=> [27, 6, 10, 11]
[SEE_ALSO] getgroups(2)
groups=(gids)
[permalink][rdoc][edit]-
補助グループを設定します。
root だけがこのメソッドを呼ぶことができます。
- [PARAM] gids:
- 補助グループ ID の配列を指定します。補助グループ ID は整数かグループ名を表す文字列です。
- [EXCEPTION] ArgumentError:
- 設定する補助グループ ID の数が Process.#maxgroups の数を越えている場合に発生します。
- [EXCEPTION] Errno::EXXX:
- 権限がない場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] setgroups(2)
initgroups(user, group) -> [Integer]
[permalink][rdoc][edit]-
user が属するグループのリストを更新し、group をそのリストに加えます。
このメソッドを呼ぶには root 権限が必要です。
- [PARAM] user:
- ユーザ名を表す文字列で指定します。
- [PARAM] group:
- ユーザグループ ID を整数で指定します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
kill(signal, pid, *rest) -> Integer
[permalink][rdoc][edit]-
pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号(整数)かその名前(文字列またはSymbol)で指定します。全てのシグナル送信に成功した場合、指定した pid の総数を返します。
- [PARAM] signal:
- シグナルをシグナル番号(整数)かその名前(文字列またはSymbol)で指定します。負の値を持つシグナル(あるいはシグナル名の前に-)を指定すると、プロセスではなくプロセスグループにシグナルを送ります。
- [PARAM] pid:
- シグナルを送りたいプロセスのプロセス ID を整数で指定します。ただし、0 以下の場合は以下のような意味になります。
- 0 の場合はカレントプロセスのプロセスグループにシグナルを送ります。
- -1 の場合はシステム上の全てのプロセスにシグナルを送ります。
- それ以外の負の整数を与えるとプロセスではなくプロセスグループにシグナルを送ります。 負の整数はプロセスグループ ID にマイナスを付けたものと見なされます。
- [PARAM] rest:
- プロセス ID を整数で指定します。
- [EXCEPTION] ArgumentError:
- 存在しないシグナルを指定した場合に発生します。
- [EXCEPTION] Errno::EXXX:
- シグナル送信に失敗した場合に発生します。
[SEE_ALSO] Kernel.#trap, kill(2)
maxgroups -> Integer
[permalink][rdoc][edit]maxgroups=(num)
-
設定できる補助グループ ID の数を指定します。
実際に返される補助グループ ID の数よりも少ない値を設定していると、 Process.#groups で例外が発生します。
- [PARAM] num:
- 整数を指定します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
pid -> Integer
[permalink][rdoc][edit]-
カレントプロセスのプロセス ID を返します。変数 $$ の値と同じです。
[SEE_ALSO] getpid(2)
ppid -> Integer
[permalink][rdoc][edit]-
親プロセスのプロセス ID を返します。UNIX では実際の親プロセスが終了した後は ppid は 1 (initの pid)になります。
[SEE_ALSO] getppid(2)
setpgid(pid, pgrp) -> 0
[permalink][rdoc][edit]-
プロセス ID が pid であるプロセスのプロセスグループを pgrp に設定します。
- [PARAM] pid:
- プロセス ID を整数で指定します。pid が 0 の時はカレントプロセスの ID を指定したのと同じです。プロセスグループの設定に成功した場合は 0 を返します。
- [PARAM] pgrp:
- プロセスグループ ID を整数で指定します。pgrp が 0 の時は pid を指定したのと同じです。
- [EXCEPTION] Errno::EXXX:
- プロセスグループの設定に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] setpgid(2)
setpgrp -> 0
[permalink][rdoc][edit]-
カレントプロセスの ID と同じ ID をもつプロセスグループを作成し、カレントプロセスをそのリーダーにします。 Process.#setpgid(0, 0) と同じです。
- [EXCEPTION] Errno::EXXX:
- プロセスグループの設定に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
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][edit]-
プロセス、プロセスグループ、ユーザのいずれかの現在のプライオリティを設定します。プライオリティの設定に成功した場合は 0 を返します。
- [PARAM] which:
- プライオリティを設定する対象の種類を以下の定数のいずれかで指定します。
- [PARAM] who:
- which の値にしたがってプロセス ID、プロセスグループ ID、ユーザ ID のいずれかを整数で指定します。
- [PARAM] prio:
- プライオリティを -20 から 20 までの整数で設定します。小さな値はプライオリティが高いことを意味し、大きな値はプライオリティが低いことを意味します。
- [EXCEPTION] Errno::EXXX:
- プライオリティの設定に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
以下の例は呼び出したプロセス自身のプライオリティを 10 に下げます。すでに 10 よりもプライオリティが低く、 Errno::EACCES となった場合には無視して実行を続けます。
begin Process.setpriority(Process::PRIO_PROCESS, 0, 10) rescue Errno::EACCES end
[SEE_ALSO] setpriority(2)
setproctitle(title) -> String
[permalink][rdoc][edit]-
ps(1) が出力する現在実行中の Ruby スクリプトの名前を引数 title で指定した文字列に変更します。
OS によっては何も行われません。また、処理結果に関係なく例外は発生しません。サポートされる OS ではない場合であっても NotImplementedError が発生する事はありません。本メソッドを実行しても $0 への影響はありません。
Process.setproctitle('myapp: worker #%d' % worker_id)
本メソッドは 2.1 以降でグローバル変数を用いないで現在実行中の Ruby スクリプトの名前を表す文字列を設定する手段として提供されました。
[SEE_ALSO] Process.#argv0, $0
setrlimit(resource, cur_limit, max_limit) -> nil
[permalink][rdoc][edit]setrlimit(resource, limit) -> nil
-
カレントプロセスでのリソースの制限値を設定します。
- [PARAM] resource:
- リソースの種類を示す定数を指定します。指定できる定数はシステムに依存します。
- [PARAM] limit:
- resource によって意味が決まる制限値を表す整数もしくは定数を指定します。 soft limit と hard limit 両方にこの値が使われます。
- [PARAM] cur_limit:
- 現在の制限値(soft limit)を表す整数もしくは定数を指定します。
- [PARAM] max_limit:
- soft limit として設定可能な最大値(hard limit)を表す整数もしくは定数を指定します。
- [EXCEPTION] Errno::EXXX:
- リソースの制限値の設定に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
引数 resource で有効な定数は以下のとおりです。
- Process::RLIMIT_CORE
-
core ファイルのサイズ (バイト) (SUSv3)
- Process::RLIMIT_CPU
-
プロセスの CPU 時間 (秒) (SUSv3)
- Process::RLIMIT_DATA
-
プロセスのデータ領域のサイズ (バイト) (SUSv3)
- Process::RLIMIT_FSIZE
-
プロセスが生成するファイルのサイズ (バイト) (SUSv3)
- Process::RLIMIT_NOFILE
-
プロセスがオープンできるファイルの数 (SUSv3)
- Process::RLIMIT_STACK
-
プロセスのスタック領域のサイズ (バイト) (SUSv3)
- Process::RLIMIT_AS
-
プロセスの仮想メモリサイズ (バイト) (SUSv3, NetBSD, FreeBSD, OpenBSD but 4.4BSD-Lite))
- Process::RLIMIT_MEMLOCK
-
mlock(2) でロックできるトータルのサイズ (バイト) (4.4BSD, GNU/Linux)
- Process::RLIMIT_NPROC
-
そのユーザのプロセスの最大数 (4.4BSD, GNU/Linux)
- Process::RLIMIT_RSS
-
使用できる実メモリの最大サイズ (バイト) (4.2BSD, GNU/Linux)
- Process::RLIMIT_SBSIZE
-
ソケットバッファのサイズ (バイト) (NetBSD, FreeBSD)
引数 limit, cur_limit, max_limit で有効な定数は以下のとおりです。
- Process::RLIM_INFINITY リソースに制限を設けないことを意味します。
- Process::RLIM_SAVED_CUR
- Process::RLIM_SAVED_MAX
以下の例は 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][edit]-
新しいセッションを作成して、tty を切り離します。デーモンを簡単に作ることができます。セッション ID を返します。
- [EXCEPTION] Errno::EXXX:
- セッションの作成に失敗した場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] setsid(2)
times -> Process::Tms
[permalink][rdoc][edit]-
自身のプロセスとその子プロセスが消費したユーザ/システム CPU 時間の積算を Process::Tms オブジェクトで返します。時間の単位は秒で、浮動小数点数で与えられます。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] Process::Tms
uid -> Integer
[permalink][rdoc][edit]-
プロセスの実ユーザ ID を返します。
[SEE_ALSO] getuid(2)
uid=(id)
[permalink][rdoc][edit]-
プロセスの実ユーザ ID を id に設定します。
動作の詳細はプラットフォームに依存します。実ユーザ ID 以外のユーザ ID も変更されるかも知れません。
- [PARAM] id:
- 実ユーザ ID を整数で指定します。
- [EXCEPTION] Errno::EXXX:
- 権限がない場合に発生します。
- [EXCEPTION] NotImplementedError:
- メソッドが現在のプラットフォームで実装されていない場合に発生します。
[SEE_ALSO] Process::UID
wait(pid = -1, flags = 0) -> Integer | nil
[permalink][rdoc][edit]wait2(pid = -1, flags = 0) -> [Integer, Process::Status] | nil
waitpid(pid = -1, flags = 0) -> Integer | nil
waitpid2(pid = -1, flags = 0) -> [Integer, Process::Status] | nil
-
pid で指定される特定の子プロセスの終了を待ち、そのプロセスが終了した時に pid を返します。 wait2, waitpid2 は子プロセスの pid と終了ステータスを表す Process::Status オブジェクトの配列を返します。ノンブロッキングモードで子プロセスがまだ終了していない時には nil を返します。
$? に終了した子プロセスの Process::Status オブジェクトがセットされます。
- [PARAM] pid:
- 子プロセスのプロセス ID を整数で指定します。 0 以上なら指定されたプロセス ID の子プロセスを待ちます。 0 なら呼び出し元のプロセスとプロセスグループ ID が同じ任意の子プロセスを待ちます。 -1 (省略時のデフォルト) は任意の子プロセスを待ちます。 -1 未満なら pid の絶対値とプロセスグループ ID が同じ任意の子プロセスを待ちます。
- [PARAM] flags:
- Process モジュールの定数 Process::WNOHANG(ノンブロッキングモード)と Process::WUNTRACED の論理和を指定します。省略したときの値は 0 です。ノンブロッキングモードで子プロセスがまだ終了していない時には nil を返します。waitpid(2) か wait4(2) の実装されていないマシンでは flags はいつも nil または 0 を指定する必要があります。
- [EXCEPTION] Errno::ECHILD:
- 子プロセスが存在しない場合に発生します。
pid = fork { sleep 1 } Process.wait2 # => [70024, #<Process::Status: pid 70024 exit 0>]
[SEE_ALSO] wait(2), waitpid(2)
waitall -> [[Integer, Process::Status]]
[permalink][rdoc][edit]-
全ての子プロセスが終了するのを待ちます。終了した子プロセスの 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)>]]
定数
CLOCK_BOOTTIME -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_BOOTTIME_ALARM -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_MONOTONIC -> Integer | Symbol
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては :MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC です。システムによっては定義されていません。
CLOCK_MONOTONIC_COARSE -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_MONOTONIC_FAST -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_MONOTONIC_PRECISE -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_MONOTONIC_RAW -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_MONOTONIC_RAW_APPROX -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_PROCESS_CPUTIME_ID -> Integer | Symbol
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては :GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID です。システムによっては定義されていません。
CLOCK_PROF -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_REALTIME -> Integer | Symbol
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては :GETTIMEOFDAY_BASED_CLOCK_REALTIME です。システムによっては定義されていません。
CLOCK_REALTIME_ALARM -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_REALTIME_COARSE -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_REALTIME_FAST -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_REALTIME_PRECISE -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_SECOND -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_THREAD_CPUTIME_ID -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_UPTIME -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_UPTIME_FAST -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_UPTIME_PRECISE -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_UPTIME_RAW -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_UPTIME_RAW_APPROX -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
CLOCK_VIRTUAL -> Integer
[permalink][rdoc][edit]-
Process.#clock_gettime で使われます。
システムによっては定義されていません。
PRIO_PGRP -> Integer
[permalink][rdoc][edit]-
対象とするプライオリティがプロセスグループプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
PRIO_PROCESS -> Integer
[permalink][rdoc][edit]-
対象とするプライオリティがプロセスプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
PRIO_USER -> Integer
[permalink][rdoc][edit]-
対象とするプライオリティがユーザプライオリティであることを表す定数です。
Process.#getpriority または Process.#setpriority で使われます。
RLIMIT_AS -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスの仮想メモリサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_CORE -> Integer
[permalink][rdoc][edit]-
リソースの種類が core ファイルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_CPU -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスの CPU 時間であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_DATA -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスのデータ領域のサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_FSIZE -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスが生成するファイルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_MEMLOCK -> Integer
[permalink][rdoc][edit]-
リソースの種類が mlock(2) でロックできるトータルのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_NOFILE -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスがオープンできるファイルの数であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_NPROC -> Integer
[permalink][rdoc][edit]-
リソースの種類がユーザのプロセスの最大数であることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_RSS -> Integer
[permalink][rdoc][edit]-
リソースの種類が使用できる実メモリの最大サイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_SBSIZE -> Integer
[permalink][rdoc][edit]-
リソースの種類がソケットバッファのサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIMIT_STACK -> Integer
[permalink][rdoc][edit]-
リソースの種類がプロセスのスタック領域のサイズであることを示す定数です。
Process.#getrlimit、Process.#setrlimit で使われます。システムによっては定義されていません。
RLIM_INFINITY -> Integer
[permalink][rdoc][edit]-
リソースに制限がないことを意味する定数です。
Process.#getrlimit、Process.#setrlimit で使われます。
RLIM_SAVED_CUR -> Integer
[permalink][rdoc][edit]-
Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。
RLIM_SAVED_MAX -> Integer
[permalink][rdoc][edit]-
Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。
WNOHANG -> Integer
[permalink][rdoc][edit]-
Process.#waitpid の第二引数に指定するフラグです。終了した子プロセスがない時でも waitpid がブロックしません。
WUNTRACED -> Integer
[permalink][rdoc][edit]-
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)