ruby process
管理UNIX进程的模块.
请注意, Process并不是用来显示进程的类, 而是囊括了进程操作方法的模块.
管理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.forkProcess.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.maxgroupsProcess.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使用的常数:PRIO_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使用的常数:PRIO_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.waitProcess.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_PROCESSPRIO_PGRP-
进程组优先级。
PRIO_USER-
用户优先级。
WNOHANG-
Process#waitpid的第二参数中所用的标识。若没有已结束的子进程时,
waitpid不会进入阻塞状态。 WUNTRACED-
Process#waitpid的第二参数中所用的标识。若某子进程因挂起而不能报告状态值时,
waitpid不会进入阻塞状态。
浙公网安备 33010602011771号