理UNIX进程的模块.
请注意, Process并不是用来显示进程的类, 而是囊括了进程操作方法的模块.
模块方法:
Process.abort([message])
ruby 1.7 特性
与abort函数相同 。
Process.daemon(nochdir=nil,noclose=nil)
ruby 1.9 特性
将控制终端从进程中剥离出来, 将进程转到后台并以deamon方式运行.
将当前目录转移到 / . 若nochdir为真,则不进行该操作, 即不转移当前目录 .
将标准输入,标准输出,标准错误输出重定向到 /dev/nul. 若noclose为真, 则不进行该操作, 即不进行重定向.
返回0.
Process.detach(pid)
ruby 1.8 特性
生成并返回一个用来监视子进程pid结束情况的线程. 当子进程结束时, 该线程也将结束并返回nil. (若指定的子进程并不存在时, 该线程会立刻结束并返回nil).
pid = fork {
# child
sleep 3
}
th = Process.detach(pid)
p th.value
# => nil
Process.exit([status])
ruby 1.7 特性
等同于exit函数 。
Process.exit!([status])
等同于exit!函数 。
Process.fork
Process.fork { ... }
等同于fork函数 。
Process.spawn(cmd, [, arg, ...]) ((<ruby 1.9 特性>))
等同于spawn函数 。
模块属性:
以下这些是模块函数。
Process.egid
返回当前进程的有效group ID 。
Process.egid=gid
设定当前进程的有效group ID。返回gid 。
Process.euid
返回当前进程的有效用户ID 。
Process.euid=uid
设定当前进程的有效用户ID。返回uid 。
Process.gid
返回当前进程的实group ID 。
Process.gid=gid
设定当前进程的实group ID。返回gid 。
Process.groups
返回辅助group ID的数组(可能包括有效group ID)。
返回数组中最多可包含32个元素(这可能是个bug)。
Process.groups=gid_ary
设定辅助group。右边数组中的元素可以是group ID或group名。返回Process.groups的结果。
若所设定的辅助group ID的个数超过Process.maxgroups的值时, 将引发ArgumentError异常。
Process.maxgroups
Process.maxgroups=num
设定辅助group ID的最大可用数。 若设定值小于实际返回的辅助group ID的值时, 将在Process.groups中引发异常。
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异常。
Process.getpriority(which, who)
返回进程、进程组、用户的当前优先级(请参考getpriority(2))。
Process 模块中定义了下列可供which使用的常数
RIO_PROCESS, PRIO_PGRP, PRIO_USER。
who则按照which的不同来分别指定进程ID、进程组ID或用户ID。
若未能成功获取优先级,则引发Errno::EXXX异常。
Process.initgroups(user, group)
招募撰稿人
(请参考initgroups(3))
Process.kill(signal, pid ... )
向pid所指进程发送信号。signal可以是信号编号或名称(字符串或Symbol)。若信号是负值(或信号名称前面带有-时), 则向进程组而非进程发送信号。
若所有信号都被成功发送时, 返回指定的pid的值。若失败的话,引发Errno::EXXX异常。
若指定了并不存在的信号时, 引发ArgumentError异常。
另外请参考trap
Process.setpgrp(pid, pgrp)
Process.setpgrp ((<ruby 1.7 特性>))
Process.setpgid(pid, pgrp)
设定pid的进程组。若pid为0则意味着当前进程。
若成功设定进程组则返回0 。若失败则引发Errno::EXXX异常。
ruby 1.7 特性: 在1.7版本中, Process.setpgrp不带参数。
Process.setpriority(which, who, prio)
设定进程、进程组、用户的当前优先级(请参考setpriority(2))。
Process 模块中定义了下列可供which使用的常数
RIO_PROCESS, PRIO_PGRP, PRIO_USER。
who则按照which的不同来分别指定进程ID、进程组ID或用户ID。
prio的取值范围是-20到20。
若成功设定优先级则返回0 。若失败则引发Errno::EXXX异常。
Process.setsid()
生成新的session,并剥离tty。可方便地生成deamon。返回session ID 。
若未能成功生成session ID , 则引发Errno::EXXX异常。
Process.times ((<ruby 1.7 特性>))
以Struct::Tms对象的形式返回自身进程及其子进程所消耗的用户/系统CPU时间的累计值。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 特性: 从1.7版本开始, $?变为Process::Status对象。
Process.waitall ((<ruby 1.7 特性>))
等待所有子进程的终结。
它返回一个数组, 数组元素由已终结的子进程的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 特性: 从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 特性>))
显示进程结束状态值的类。请参考Process::Status 。
内部模块:
UID ((<ruby 1.8 特性>))
GID ((<ruby 1.8 特性>))
Sys ((<ruby 1.8 特性>))
该模块囊括了对进程的用户/组 属性进行操作的方法。UID和GID模块超越了各种Unix系统间的差异,提供了统一的接口。
Sys模块提供了相当于系统调用的各种方法。
请分别参考Process::UID, Process::GID, Process::Sys 。