Standard C Library Functions getrusage(3C)
NAME
getrusage - get information about resource utilization
SYNOPSIS
#include
int getrusage(int who, struct rusage *rusage);
DESCRIPTION
The getrusage() function provides measures of the resources
used by the current process, its terminated and waited-for
child processes, or the current light weight process (LWP).
If the value of the who argument is RUSAGESELF, information
is returned about resources used by the current process. If
the value of the who argument is RUSAGECHILDREN, informa-
tion is returned about resources used by the terminated and
waited-for children of the current process. If the child is
never waited for (for instance, if the parent has
SANOCLDWAIT set or sets SIGCHLD to SIGIGN), the resource
information for the child process is discarded and not
included in the resource information provided by
getrusage(). If the value of the who argument is RUSAGELWP,
information is returned about resources used by the current
LWP.
The rusage argument is a pointer to an object of type
struct rusage in which the returned information is stored.
The members of rusage are as follows:
struct timeval ruutime; /* user time used */
struct timeval rustime; /* system time used */
long rumaxrss; /* maximum resident set size */
long ruidrss; /* integral resident set size */
long ruminflt; /* page faults not requiring physical
I/O */
long rumajflt; /* page faults requiring physical I/O */
long runswap; /* swaps */
long ruinblock; /* block input operations */
long ruoublock; /* block output operations */
long rumsgsnd; /* messages sent */
long rumsgrcv; /* messages received */
long runsignals; /* signals received */
long runvcsw; /* voluntary context switches */
long runivcsw; /* involuntary context switches */
The structure members are interpreted as follows:
SunOS 5.11 Last change: 2 Jul 2004 1
Standard C Library Functions getrusage(3C)
ruutime The total amount of time spent executing in
user mode. Time is given in seconds and
microseconds.
rustime The total amount of time spent executing in
system mode. Time is given in seconds and
microseconds.
rumaxrss The maximum resident set size. Size is given
in pages (the size of a page, in bytes, is
given by the getpagesize(3C) function). See
the NOTES section of this page.
ruidrss An "integral" value indicating the amount of
memory in use by a process while the process
is running. This value is the sum of the
resident set sizes of the process running
when a clock tick occurs. The value is given
in pages times clock ticks. It does not take
sharing into account. See the NOTES section
of this page.
ruminflt The number of page faults serviced which did
not require any physical I/O activity. See
the NOTES section of this page.
rumajflt The number of page faults serviced which
required physical I/O activity. This could
include page ahead operations by the kernel.
See the NOTES section of this page.
runswap The number of times a process was swapped out
of main memory.
ruinblock The number of times the file system had to
perform input in servicing a read(2) request.
ruoublock The number of times the file system had to
perform output in servicing a write(2)
request.
rumsgsnd The number of messages sent over sockets.
SunOS 5.11 Last change: 2 Jul 2004 2
Standard C Library Functions getrusage(3C)
rumsgrcv The number of messages received from sockets.
runsignals The number of signals delivered.
runvcsw The number of times a context switch resulted
due to a process voluntarily giving up the
processor before its time slice was completed
(usually to await availability of a
resource).
runivcsw The number of times a context switch resulted
due to a higher priority process becoming
runnable or because the current process
exceeded its time slice.
RETURN VALUES
Upon successful completion, getrusage() returns 0. Other-
wise, -1 is returned and errno is set to indicate the error.
ERORS
The getrusage() function will fail if:
EFAULT The address specified by the rusage argument is
not in a valid portion of the process' address
space.
EINVAL The who parameter is not a valid value.
ATRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
ATRIBUTE TYPE ATRIBUTE VALUE
Interface Stability Standard
SEE ALSO
sar(1M), read(2), times(2), write(2), getpagesize(3C),
gettimeofday(3C), wait(3C), attributes(5), standards(5)
SunOS 5.11 Last change: 2 Jul 2004 3
Standard C Library Functions getrusage(3C)
NOTES
The rumaxrss, ruixrss, ruidrss, and ruisrss members of
the rusage structure are set to 0 in this implementation.
The numbers ruinblock and ruoublock account only for real
I/O, and are approximate measures at best. Data supplied by
the cache mechanism is charged only to the first process to
read and the last process to write the data.
The way resident set size is calculated is an approximation,
and could misrepresent the true resident set size.
Page faults can be generated from a variety of sources and
for a variety of reasons. The customary cause for a page
fault is a direct reference by the program to a page which
is not in memory. Now, however, the kernel can generate
page faults on behalf of the user, for example, servicing
read(2) and write(2) functions. Also, a page fault can be
caused by an absent hardware translation to a page, even
though the page is in physical memory.
In addition to hardware detected page faults, the kernel may
cause pseudo page faults in order to perform some housekeep-
ing. For example, the kernel may generate page faults, even
if the pages exist in physical memory, in order to lock down
pages involved in a raw I/O request.
By definition, major page faults require physical I/O, while
minor page faults do not require physical I/O. For example,
reclaiming the page from the free list would avoid I/O and
generate a minor page fault. More commonly, minor page
faults occur during process startup as references to pages
which are already in memory. For example, if an address
space faults on some "hot" executable or shared library,
this results in a minor page fault for the address space.
Also, any one doing a read(2) or write(2) to something that
is in the page cache will get a minor page fault(s) as well.
There is no way to obtain information about a child process
which has not yet terminated.
SunOS 5.11 Last change: 2 Jul 2004 4
|