GETRUSAGE(3C) Standard C Library Functions GETRUSAGE(3C)
NAME
getrusage - get information about resource utilization
SYNOPSIS
#include <sys/resource.h>
int getrusage(
int who,
struct rusage *r_usage);
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
RUSAGE_SELF, information is returned about resources used by the current
process. If the value of the
who argument is
RUSAGE_CHILDREN, information
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
SA_NOCLDWAIT set or sets
SIGCHLD to
SIG_IGN),
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
RUSAGE_LWP, information is returned about
resources used by the current LWP.
The
r_usage 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 ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_maxrss; /* maximum resident set size */
long ru_idrss; /* integral resident set size */
long ru_minflt; /* page faults not requiring physical
I/O */
long ru_majflt; /* page faults requiring physical I/O */
long ru_nswap; /* swaps */
long ru_inblock; /* block input operations */
long ru_oublock; /* block output operations */
long ru_msgsnd; /* messages sent */
long ru_msgrcv; /* messages received */
long ru_nsignals; /* signals received */
long ru_nvcsw; /* voluntary context switches */
long ru_nivcsw; /* involuntary context switches */
The structure members are interpreted as follows:
ru_utime The total amount of time spent executing in user mode.
Time is given in seconds and microseconds.
ru_stime The total amount of time spent executing in system mode.
Time is given in seconds and microseconds.
ru_maxrss 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.
ru_idrss 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.
ru_minflt The number of page faults serviced which did not require
any physical I/O activity. See the
NOTES section of this
page.
ru_majflt 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.
ru_nswap The number of times a process was swapped out of main
memory.
ru_inblock The number of times the file system had to perform input
in servicing a
read(2) request.
ru_oublock The number of times the file system had to perform output
in servicing a
write(2) request.
ru_msgsnd The number of messages sent over sockets.
ru_msgrcv The number of messages received from sockets.
ru_nsignals The number of signals delivered.
ru_nvcsw 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).
ru_nivcsw 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. Otherwise,
-1 is
returned and
errno is set to indicate the error.
ERRORS
The
getrusage() function will fail if:
EFAULT The address specified by the
r_usage argument is not in a valid
portion of the process' address space.
EINVAL The
who parameter is not a valid value.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Standard |
+--------------------+-----------------+
SEE ALSO
read(2),
times(2),
write(2),
getpagesize(3C),
gettimeofday(3C),
wait(3C),
attributes(7),
standards(7),
sar(8)NOTES
The
ru_maxrss,
ru_ixrss,
ru_idrss, and
ru_isrss members of the
rusage structure are set to 0 in this implementation.
The numbers
ru_inblock and
ru_oublock 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 housekeeping. 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.
July 2, 2004
GETRUSAGE(3C)