/usr/ucb/cc [flag . . . ] file . . .#include <sys/time.h> #include <sys/resource.h>
getrusage(int who, struct rusage *rusage);
The who parameter is one of RUSAGE_SELF or RUSAGE_CHILDREN. The buffer to which rusage points will be filled in with the following structure:
struct rusage { struct timeval ru_utime; /* user time used */ struct timeval ru_stime; /* system time used */ int ru_maxrss; /* maximum resident set size */ int ru_ixrss; /* currently 0 */ int ru_idrss; /* integral resident set size */ int ru_isrss; /* currently 0 */ int ru_minflt; /* page faults not requiring physical I/O */ int ru_majflt; /* page faults requiring physical I/O */ int ru_nswap; /* swaps */ int ru_inblock; /* block input operations */ int ru_oublock; /* block output operations */ int ru_msgsnd; /* messages sent */ int ru_msgrcv; /* messages received */ int ru_nsignals; /* signals received */ int ru_nvcsw; /* voluntary context switches */ int ru_nivcsw; /* involuntary context switches */ };
The fields are interpreted as follows:
getrusage will fail if:
Since System V Release 4 does not implement this function directly as a system call, an invalid address (rusage) argument may result in a core dump as opposed to returning EFAULT.
timeval
fields of
struct rusage
are supported 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 caching 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) system calls. 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.