| \section{Built-in Module \sectcode{resource}} | 
 |  | 
 | \bimodindex{resource} | 
 | This module provides basic mechanisms for measuring and controlling | 
 | system resources utilized by a program. | 
 |  | 
 | Symbolic constants are used to specify particular system resources and | 
 | to request usage information about either the current process or its | 
 | children.  | 
 |  | 
 | Resources usage can be limited using the \code{setrlimit} function | 
 | described below. Each resource is controlled by a pair of limits: a | 
 | soft limit and a hard limit. The soft limit is the current limit, and | 
 | may be lowered or raised by a process over time. The soft limit can | 
 | never exceed the hard limit. The hard limit can be lowered to any | 
 | value greater than the soft limit, but not raised. (Only process with | 
 | the effective UID of the super-user can raise a hard limit). | 
 |  | 
 | The specific resources that can be limited are system dependent. They | 
 | are described in the \code{getrlimit} man page. Typical resources | 
 | include: | 
 |  | 
 | \begin{description} | 
 |  | 
 | \item[RLIMIT_CORE] | 
 | The maximum size (in bytes) of a core file that the current process | 
 | can create. | 
 |  | 
 | \item[RLIMIT_CPU] | 
 | The maximum amount of CPU time (in seconds) that a process can use. If | 
 | this limit is exceeded, a \code{SIGXCPU} signal is sent to the | 
 | process. (See the \code{signal} module documentation for information | 
 | about how to catch this signal and do something useful, e.g. flush | 
 | open files to disk.) | 
 |  | 
 | \end{description} | 
 |  | 
 | \begin{datadesc}{RLIMIT_*} | 
 |   These symbols define resources whose consumption can be controlled | 
 |   using the \code{setrlimit} and \code{getrlimit} functions defined | 
 |   below. The values of these symbols are exactly the constants used | 
 |   by C programs. | 
 |  | 
 |   The \UNIX{} man page for \file{getrlimit} lists the available | 
 |   resources. Note that not all systems use the same symbol or same | 
 |   value to denote the same resource. | 
 | \end{datadesc} | 
 |  | 
 | \begin{datadesc}{RUSAGE_*} | 
 |   These symbols are passed to the \code{getrusage} function to specify | 
 |   whether usage information is being request for the current process, | 
 |   \code{RUSAGE_SELF} or its child processes \code{RUSAGE_CHILDREN}. On | 
 |   some system, \code{RUSAGE_BOTH} requests information for both. | 
 | \end{datadesc} | 
 |  | 
 | \begin{datadesc}{error} | 
 |   The functions described below may raise this error if the underlying | 
 |   system call failures unexpectedly. | 
 | \end{datadesc} | 
 |  | 
 | The resource module defines the following functions: | 
 |  | 
 | \begin{funcdesc}{getrusage}{who} | 
 |   This function returns a large tuple that describes the resources | 
 |   consumed by either the current process or its children, as specified | 
 |   by the \var{who} parameter. The elements of the return value each | 
 |   describe how a particular system resource has been used, e.g. amount | 
 |   of time spent running is user mode or number of times the process was | 
 |   swapped out of main memory. Some values are dependent on the clock | 
 |   tick internal, e.g. the amount of memory the process is using. | 
 |  | 
 |   The first two elements of the return value are floating point values | 
 |   representing the amount of time spent executing in user mode and the | 
 |   amount of time spent executing in system mode, respectively. The | 
 |   remaining values are integers. Consult the \code{getrusage} man page | 
 |   for detailed information about these values. A brief summary is | 
 |   presented here: | 
 |  | 
 | \begin{tabular}{rl} | 
 | 	\emph{offset} &	\emph{resource} \\ | 
 | 	0  &	time in user mode (float) \\ | 
 | 	1  &	time in system mode (float) \\ | 
 | 	2  &	maximum resident set size \\ | 
 | 	3  &	shared memory size \\ | 
 | 	4  &	unshared memory size \\ | 
 | 	5  &	unshared stack size \\ | 
 | 	6  &	page faults not requiring I/O \\ | 
 | 	7  &	page faults requiring I/O \\ | 
 | 	8  &	number of swap outs \\ | 
 | 	9  &	block input operations \\ | 
 | 	10 &	block output operations \\ | 
 | 	11 &	messages sent \\ | 
 | 	12 &	messages received \\ | 
 | 	13 &	signals received \\ | 
 | 	14 &	voluntary context switches \\ | 
 | 	15 &	involuntary context switches \\ | 
 | \end{tabular} | 
 |  | 
 |   This function will raise a ValueError if an invalid \var{who} | 
 |   parameter is specified. It may also raise a \code{resource.error} | 
 |   exception in unusual circumstances. | 
 | \end{funcdesc} | 
 |  | 
 | \begin{funcdesc}{getpagesize}{} | 
 |   Returns the number of bytes in a system page. (This need not be the | 
 |   same as the hardware page size.) This function is useful for | 
 |   determining the number of bytes of memory a process is using. The | 
 |   third element of the tuple returned by \code{getrusage} describes | 
 |   memory usage in pages; multiplying by page size produces number of | 
 |   bytes.  | 
 | \end{funcdesc} | 
 |  | 
 | \begin{funcdesc}{getrlimit}{resource} | 
 |   Returns a tuple \code{(\var{soft}, \var{hard})} with the current | 
 |   soft and hard limits of \var{resource}. Raises ValueError if | 
 |   an invalid resource is specified, or \code{resource.error} if the | 
 |   underyling system call fails unexpectedly. | 
 | \end{funcdesc} | 
 |  | 
 | \begin{funcdesc}{setrlimit}{resource\, limits} | 
 |   Sets new limits of consumption of \var{resource}. The \var{limits} | 
 |   argument must be a tuple \code{(\var{soft}, \var{hard})} of two | 
 |   integers describing the new limits. A value of -1 can be used to | 
 |   specify the maximum possible upper limit. | 
 |  | 
 |   Raises ValueError if an invalid resource is specified, if the new | 
 |   soft limit exceeds the hard limit, or if a process tries to raise its | 
 |   hard limit (unless the process has an effective UID of | 
 |   super-user). Can also raise a \code{resource.error} if the | 
 |   underyling system call fails. | 
 | \end{funcdesc} |