getrusage — get resource usage
#include <sys/time.h> #include <sys/resource.h>
int
getrusage( |
int | who, |
struct rusage * | usage) ; |
getrusage
() returns current
resource usages, for a who
of either RUSAGE_SELF
or 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 */ };
On success, zero is returned. On error, −1 is
returned, and errno
is set
appropriately.
SVr4, 4.3BSD. POSIX.1-2001 specifies getrusage
(), but only specifies the fields
ru_utime
and
ru_stime
.
Including <sys/time.h>
is not
required these days, but increases portability. (Indeed,
struct timeval is
defined in <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 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 ru_utime
,
ru_stime
,
ru_minflt
, and
ru_majflt
are
maintained. Since Linux 2.6, ru_nvcsw
and ru_nivcsw
are also
maintained.
getrlimit(2), times(2), wait(2), wait4(2)
|