NAME
getrusage - get resource usage
SYNOPSIS
#include <sys/time.h>
#include <sys/resource.h>
I int getrusage(int who , struct rusage * usage );
DESCRIPTION
R getrusage ()
returns current resource usages, for a who
of either
RUSAGE_SELF
or
R RUSAGE_CHILDREN .
The former asks for resources used by the current process,
the latter for resources used by those of its children
that have terminated and have been waited for.
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data size */
long ru_isrss; /* integral unshared stack size */
long ru_minflt; /* page reclaims */
long ru_majflt; /* page faults */
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 */
};
RETURN VALUE
On success, zero is returned.
On error, -1 is returned, and
errno
is set appropriately.
ERRORS
EFAULT
usage
points outside the accessible address space.
CONFORMING TO
SVr4, 4.3BSD.
POSIX.1-2001 specifies
R getrusage (),
but only specifies the fields
ru_utime
and
R ru_stime .
NOTES
Including
<sys/time.h>
is not required these days, but increases portability.
(Indeed,
struct timeval
is defined in
R <sys/time.h> .)
In Linux kernel versions before 2.6.9, if the disposition of
SIGCHLD
is set to
SIG_IGN
then the resource usages of child processes
are automatically included in the value returned by
R RUSAGE_CHILDREN ,
although POSIX.1-2001 explicitly prohibits this.
This non-conformance is rectified in Linux 2.6.9 and later.
The above struct was taken from 4.3BSD Reno.
Not all fields are meaningful under Linux.
In linux 2.4 only the fields
R ru_utime ,
R ru_stime ,
R ru_minflt ,
and
R ru_majflt
are maintained.
Since Linux 2.6,
ru_nvcsw
and
ru_nivcsw
are also maintained.
SEE ALSO