Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Processモジュール

module Process

クラスの継承リスト: Process

Abstract

UNIX のプロセスを管理するモジュールです。

Process がプロセスを表現するクラスではなく、プロセスに対する操作 をまとめたモジュールであることに注意してください。

ユーザ ID・グループ ID を操作するシステムコールを直接呼ぶために Process::Sys が提供されています。 ポータブルにユーザ ID・グループ ID を操作するためのモジュール Process::UID, Process::GID も提供されています。

特異メソッド

abort(message = "") -> ()

関数 Kernel.#abort と同じです。

[PARAM] message:
終了時のメッセージを文字列で指定します。
daemon(nochdir = nil, noclose = nil) -> 0

プロセスから制御端末を切り離し、 バックグラウンドにまわってデーモンとして動作させます。

カレントディレクトリを / に移動します。 ただし nochdir に真を指定したときにはこの動作は抑制され、 カレントディレクトリは移動しません。

標準入力・標準出力・標準エラー出力を /dev/null にリダイレクトします。 ただし noclose に真を指定したときにはこの動作は抑制され、 リダイレクトは行なわれません。

[PARAM] nochdir:
true を指定した場合、カレントディレクトリを移動しません。
[PARAM] noclose:
true を指定した場合、標準入力・標準出力・標準エラー出力を変更しません。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。
detach(pid) -> Thread

子プロセス pid の終了を監視するスレッドを生成して返します。 生成したスレッドは子プロセスが終了した後に nil で終了します。 指定した子プロセスが存在しなければ即座に nil で終了します。

[PARAM] pid:
子スレッドのプロセス ID を整数で指定します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。
pid = fork {
  # child
  sleep 3
}

th = Process.detach(pid)
p th.value

# => nil
exec(command, *args) -> ()

カレントプロセスを与えられた外部コマンドで置き換えます。

引数の解釈

引数が一つだけ与えられた場合、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) -> ()

プロセスを終了します。関数 Kernel.#exit と同じです。

[PARAM] status:
終了ステータスを boolean か整数で指定します。true の場合は成功を、false は失敗を意味します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] exit(3)

exit!(status = false) -> ()

関数 Kernel.#exit! と同じです。

[PARAM] status:
終了ステータスを boolean か整数で指定します。true の場合は成功を、false は失敗を意味します。

[SEE_ALSO] _exit(2)

fork -> Integer | nil
fork { ... } -> Integer | nil

子プロセスを生成します。関数 Kernel.#fork と同じです。

[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] fork(2)

spawn(cmd, *arg) -> Integer

関数 Kernel.#spawn と同じです。

[PARAM] cmd:
Kernel.#spawn と同じです。
[PARAM] arg:
Kernel.#spawn と同じです。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

モジュール関数

egid -> Integer

カレントプロセスの実効グループ ID を整数で返します。

[SEE_ALSO] getegid(2)

egid=(gid)

カレントプロセスの実効グループ ID を gid に設定します。

動作の詳細はプラットフォームに依存します。 実効グループ ID 以外のグループ ID も変更されるかも知れません。

[PARAM] gid:
実効グループ ID を整数で指定します。
[EXCEPTION] Errno::EXXX:
権限がない場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] Process::GID.#eid=

euid -> Integer

カレントプロセスの実効ユーザ ID を整数で返します。

[SEE_ALSO] geteuid(2)

euid=(uid)

カレントプロセスの実効ユーザ ID を uid に設定します。

動作の詳細はプラットフォームに依存します。 実効ユーザ ID 以外のユーザ ID も変更されるかも知れません。

[PARAM] uid:
実効ユーザ ID を整数で指定します。
[EXCEPTION] Errno::EXXX:
権限がない場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] Process::UID.#eid=

getpgid(pid = 0) -> Integer

プロセス ID が pid であるプロセスのプロセスグループ ID を整数で返します。

[PARAM] pid:
プロセス ID を整数で指定します。0 の時はカレントプロセス ID を指定したのと同じです。
[EXCEPTION] Errno::EXXX:
プロセスグループの取得に失敗した場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] getpgid(2)

getpgrp -> Integer

現在のプロセスのプロセスグループ ID を整数で返します。

[EXCEPTION] Errno::EXXX:
プロセスグループの取得に失敗した場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] getpgrp(2)

getpriority(which, who) -> Integer

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]

カレントプロセスでのリソースの制限値を、整数の配列として返します。 返り値は、現在の制限値 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)

gid -> Integer

カレントプロセスの実グループ ID を返します。

[SEE_ALSO] getgid(2)

gid=(gid)

カレントプロセスの実グループ ID を gid に設定します。

動作の詳細はプラットフォームに依存します。 実グループ ID 以外のグループ ID も変更されるかも知れません。

[PARAM] gid:
実グループ ID を整数で指定します。
[EXCEPTION] Errno::EXXX:
権限がない場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] Process::GID

groups -> [Integer]

補助グループ ID の配列を返します(実効グループ ID を含むかも知れません)。

返される配列の最大要素数は Process.#maxgroups です。

[EXCEPTION] Errno::EXXX:
Process.#maxgroups が実際に返される補助グループ ID の 数よりも少ない値を設定していると発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] getgroups(2)

groups=(gids)

補助グループを設定します。

root だけがこのメソッドを呼ぶことができます。

[PARAM] gids:
補助グループ ID の配列を指定します。補助グループ ID は整数かグループ名を表す文字列です。
[EXCEPTION] ArgumentError:
設定する補助グループ ID の数が Process.#maxgroups の 数を越えている場合に発生します。
[EXCEPTION] Errno::EXXX:
権限がない場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] setgroups(2)

initgroups(user, group) -> [Integer]

user が属するグループのリストを更新し、group をそのリストに加えます。

このメソッドを呼ぶには root 権限が必要です。

[PARAM] user:
ユーザ名を表す文字列で指定します。
[PARAM] group:
ユーザグループ ID を整数で指定します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。
kill(signal, pid, *rest) -> Integer

pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号か名前(文字列またはSymbol)で指定します。 全てのシグナル送信に成功した場合、指定した pid の総数を返します。

[PARAM] signal:
シグナルを整数かその名前の文字列で指定します。負の値を持つシグナル(あるいはシグナル名の前に-)を指定すると、プロセスではなくプロセスグループにシグナルを送ります。
[PARAM] pid:
シグナルを送りたいプロセスのプロセス ID を整数で指定します。ただし、0 以下の場合は以下のような意味になります。
  • 0 の場合はカレントプロセスのプロセスグループにシグナルを送ります。
  • -1 の場合はシステム上の全てのプロセスにシグナルを送ります。
  • それ以外の負の整数を与えるとプロセスではなくプロセスグループにシグナルを送ります。 負の整数はプロセスグループ ID にマイナスを付けたものと見なされます。
[PARAM] rest:
プロセス ID を整数で指定します。
[EXCEPTION] ArgumentError:
存在しないシグナルを指定した場合に発生します。
[EXCEPTION] Errno::EXXX:
シグナル送信に失敗した場合に発生します。

[SEE_ALSO] Kernel.#trap, kill(2)

maxgroups -> Integer
maxgroups=(num)

設定できる補助グループ ID の数を指定します。

実際に返される補助グループ ID の数よりも少ない値を設定していると、 Process.#groups で例外が発生します。

[PARAM] num:
整数を指定します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。
pid -> Integer

カレントプロセスのプロセス ID を返します。変数 $$ の値と同じです。

[SEE_ALSO] getpid(2)

ppid -> Integer

親プロセスのプロセス ID を返します。UNIX では実際の親プロセスが終 了した後は ppid は 1 (initの pid)になります。

[SEE_ALSO] getppid(2)

setpgid(pid, pgrp) -> 0

プロセス 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

カレントプロセスの 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

プロセス、プロセスグループ、 ユーザのいずれかの現在のプライオリティを設定します 。プライオリティの設定に成功した場合は 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)

setrlimit(resource, cur_limit, max_limit) -> nil
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 で有効な定数は以下のとおりです。

以下の例は RLIMIT_CORE の制限を hard limit (max limit) まで引き上げ、可能なら core を残すようにします。

Process.setrlimit(Process::RLIMIT_CORE,
                  Process.getrlimit(Process::RLIMIT_CORE)[1])

[SEE_ALSO] setrlimit(2)

setsid -> Integer

新しいセッションを作成して、tty を切り離します。デーモンを簡単に作 ることができます。セッション ID を返します。

[EXCEPTION] Errno::EXXX:
セッションの作成に失敗した場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] setsid(2)

times -> Struct::Tms

自身のプロセスとその子プロセスが消費したユーザ/システム CPU 時間の積算を Struct::Tms オブジェクトで返します。 時間の単位は秒で、浮動小数点数で与えられます。

[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] Struct::Tms

uid -> Integer

プロセスの実ユーザ ID を返します。

[SEE_ALSO] getuid(2)

uid=(id)

プロセスの実ユーザ ID を id に設定します。

動作の詳細はプラットフォームに依存します。 実ユーザ ID 以外のユーザ ID も変更されるかも知れません。

[PARAM] id:
実ユーザ ID を整数で指定します。
[EXCEPTION] Errno::EXXX:
権限がない場合に発生します。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。

[SEE_ALSO] Process::UID

wait -> Integer
wait2 -> Array

子プロセスのうちのひとつが終了するまで待ち、終了した子プロセスの pid を返します。 wait2 は子プロセスの pid と終了ステータスを表す Process::Status オブジェクトの配列を返します。

$? に終了した子プロセスの Process::Status オブジェクトがセットされます。

[EXCEPTION] Errno::ECHILD:
子プロセスが一つもなければ発生します。
pid = fork{ sleep 1 }
Process.wait2 #=> [2756, #<Process::Status: pid=2756,exited(0)>]

[SEE_ALSO] wait(2)

waitall -> Array

全ての子プロセスが終了するのを待ちます。 終了した子プロセスの 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
waitpid2(pid, flags = 0) -> Array | nil

pid で指定される特定の子プロセスの終了を待ち、そのプロセスが 終了した時に pid を返します。 waitpid2 は pid と Process::Status オブジェクトの配列を返します。 ノンブロッキングモードで子プロセスがまだ終了していない時には nil を返します。

$? に終了した子プロセスの Process::Status オブジェクトがセットされます。

[PARAM] pid:
子プロセスのプロセス ID を整数で指定します。
[PARAM] flags:
Process モジュールの定数 Process::WNOHANG(ノンブロッキングモード)と Process::WUNTRACED の論理和を指定します。省略したときの値は 0 です。 ノンブロッキングモードで子プロセスがまだ終了していない時には nil を返します。waitpid(2)wait4(2) の実装されていないマシンでは flags はいつも nil または 0 を指定する必要があります。
[EXCEPTION] Errno::ECHILD:
子プロセスが存在しない場合に発生します。

[SEE_ALSO] waitpid(2)

定数

PRIO_PGRP

対象とするプライオリティがプロセスグループプライオリティであることを表す定数です。

Process.#getpriority または Process.#setpriority で使われます。

PRIO_PROCESS

対象とするプライオリティがプロセスプライオリティであることを表す定数です。

Process.#getpriority または Process.#setpriority で使われます。

PRIO_USER

対象とするプライオリティがユーザプライオリティであることを表す定数です。

Process.#getpriority または Process.#setpriority で使われます。

RLIMIT_AS

リソースの種類がプロセスの仮想メモリサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_CORE

リソースの種類が core ファイルのサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_CPU

リソースの種類がプロセスの CPU 時間であることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_DATA

リソースの種類がプロセスのデータ領域のサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_FSIZE

リソースの種類がプロセスが生成するファイルのサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_MEMLOCK

リソースの種類が mlock(2) でロックできるトータルのサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_NOFILE

リソースの種類がプロセスがオープンできるファイルの数であることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_NPROC

リソースの種類がユーザのプロセスの最大数であることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_RSS

リソースの種類が使用できる実メモリの最大サイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_SBSIZE

リソースの種類がソケットバッファのサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIMIT_STACK

リソースの種類がプロセスのスタック領域のサイズであることを示す定数です。

Process.#getrlimitProcess.#setrlimit で使われます。 システムによっては定義されていません。

RLIM_INFINITY

リソースに制限がないことを意味する定数です。

Process.#getrlimitProcess.#setrlimit で使われます。

RLIM_SAVED_CUR

Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。

RLIM_SAVED_MAX

Process.#getrlimit, Process.#setrlimit で使われます。詳しくは setrlimit(2) を参照して下さい。

WNOHANG

Process.#waitpid の第二引数に指定するフラグです。 終了した子プロセスがない時でも waitpid がブロックしません。

WUNTRACED

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)

Methods

Classes