Programming Ruby

The Pragmatic Programmer's Guide

Previous < Contents ^
module Process

Index:

egid egid= euid euid= exit! fork getpgid getpgrp getpriority gid gid= kill pid ppid setpgid setpgrp setpriority setsid uid uid= wait wait2 waitpid waitpid2


The Process module is a collection of methods used to manipulate processes.

constants

PRIO_PGRP 1 Process Group priority.
PRIO_PROCESS 0 Process priority.
PRIO_USER 2 User priority.
WNOHANG 1 Do not block if no child has exited. Not available on all platforms.
WUNTRACED 2 Return stopped children as well. Not available on all platforms.

class methods
egid Process.egid -> aFixnum

Returns the effective group id for this process.

Process.egid » 500

egid= Process.egid= aFixnum -> aFixnum

Sets the effective group id for this process.

euid Process.euid -> aFixnum

Returns the effective user id for this process.

Process.euid » 501

euid= Process.euid= aFixnum

Sets the effective user id for this process. Not available on all platforms.

exit! Process.exit!( aFixnum=-1 )

Exits the process immediately. No exit handlers are run. aFixnum is returned to the underlying system as the exit status.

Process.exit!(0)

fork Process.fork [{ block } ] -> aFixnum or nil

See Kernel::fork on page 416.

getpgid Process.getpgid( anInteger ) -> anInteger

Returns the process group id for the given process id. Not available on all platforms.

Process.getpgid(Process.ppid()) » 32438

getpgrp Process.getpgrp -> anInteger

Returns the process group id for this process. Not available on all platforms.

Process.getpgid(0) » 32438
Process.getpgrp » 32438

getpriority Process.getpriority( aKind, anInteger ) -> aFixnum

Gets the scheduling priority for specified process, process group, or user. aKind indicates the kind of entity to find: one of Process::PRIO_PGRP , Process::PRIO_USER , or Process::PRIO_PROCESS . anInteger is an id indicating the particular process, process group, or user (an id of 0 means current). Lower priorities are more favorable for scheduling. Not available on all platforms.

Process.getpriority(Process::PRIO_USER, 0) » 0
Process.getpriority(Process::PRIO_PROCESS, 0) » 0

gid Process.gid -> aFixnum

Returns the group id for this process.

Process.gid » 500

gid= Process.gid= aFixnum -> aFixnum

Sets the group id for this process.

kill Process.kill( aSignal, [ aPid ]+ ) -> aFixnum

Sends the given signal to the specified process id(s), or to the current process if aPid is zero. aSignal may be an integer signal number or a POSIX signal name (either with or without a SIG prefix). If aSignal is negative (or starts with a ``-'' sign), kills process groups instead of processes. Not all signals are available on all platforms.

trap("SIGHUP") { close_then_exit }
Process.kill("SIGHUP", 0)

pid Process.pid -> aFixnum

Returns the process id of this process. Not available on all platforms.

Process.pid » 1488

ppid Process.ppid -> aFixnum

Returns the process id of the parent of this process. Always returns 0 on NT. Not available on all platforms.

print "I am ", Process.pid, "\n"
Process.fork { print "Dad is ", Process.ppid, "\n" }
produces:
I am 1490
Dad is 1490

setpgid Process.setpgid( aPid, anInteger ) -> 0

Sets the process group id of aPid (0 indicates this process) to anInteger. Not available on all platforms.

setpgrp Process.setpgrp -> 0

Equivalent to setpgid(0,0). Not available on all platforms.

setpriority Process.setpriority( kind, anInteger, anIntPriority ) -> 0

See Process#getpriority .

Process.setpriority(Process::PRIO_USER, 0, 19) » 0
Process.setpriority(Process::PRIO_PROCESS, 0, 19) » 0
Process.getpriority(Process::PRIO_USER, 0) » 19
Process.getpriority(Process::PRIO_PROCESS, 0) » 19

setsid Process.setsid -> aFixnum

Establishes this process as a new session and process group leader, with no controlling tty. Returns the session id. Not available on all platforms.

Process.setsid » 1495

uid Process.uid -> aFixnum

Returns the user id of this process.

Process.uid » 501

uid= Process.uid= anInteger -> aNumeric

Sets the (integer) user id for this process. Not available on all platforms.

wait Process.wait -> aFixnum

Waits for any child process to exit and returns the process id of that child. Raises a SystemError if there are no child processes. Not available on all platforms.

Process.fork { exit 1; } » 1500
Process.wait » 1500

wait2 Process.wait2 -> anArray

Waits for any child process to exit and returns an array containing the process id and the exit status of that child. Raises a SystemError if there are no child processes.

Process.fork { exit 1 } » 1503
Process.wait2 » [1503, 256]

waitpid Process.waitpid( aPid, anInteger=0 ) -> aPid

Waits for the given child process to exit. anInteger may be a logical or of the flag value Process::WNOHANG (do not block if no child available) or Process::WUNTRACED (return stopped children that haven't been reported). Not all flags are available on all platforms, but a flag value of zero will work on all platforms.

include Process
pid = fork { sleep 3 } » 1506
Time.now » Sun Jun 09 00:20:09 CDT 2002
waitpid(pid, Process::WNOHANG) » nil
Time.now » Sun Jun 09 00:20:09 CDT 2002
waitpid(pid, 0) » 1506
Time.now » Sun Jun 09 00:20:12 CDT 2002

waitpid2 Process.waitpid2( aPid, anInteger=0 ) -> anArray

Waits for the given child process to exit, returning that child's process id and exit status. anInteger may be a logical or of the flag value Process::WNOHANG (do not block if no child available) or Process::WUNTRACED (return stopped children that haven't been reported). Not all flags are available on all platforms, but a flag value of zero will work on all platforms.


Previous < Contents ^

Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright © 2001 by Addison Wesley Longman, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/)).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.