This chapter describes functions for examining how much of various kinds of resources (CPU time, memory, etc.) a process has used and getting and setting limits on future usage.
The function getrusage and the data type struct rusage are used to examine the resource usage of a process. They are declared in sys/resource.h.
int function>getrusage/function> (int processes, struct rusage *rusage) This function reports resource usage totals for processes specified by processes, storing the information in *rusage.
In most systems, processes has only two valid values:
Just the current process.
All child processes (direct and indirect) that have already terminated.
In the GNU system, you can also inquire about a particular child process by specifying its process ID.
The return value of getrusage is zero for success, and -1 for failure.
The argument processes is not valid.
One way of getting resource usage for a particular child process is with the function wait4, which returns totals for a child when it terminates. the section called “BSD Process Wait Functions”.
function>struct rusage/function> This data type stores various resource usage statistics. It has the following members, and possibly others:
Time spent executing user instructions.
Time spent in operating system code on behalf of processes.
The maximum resident set size used, in kilobytes. That is, the maximum number of kilobytes of physical memory that processes used simultaneously.
An integral value expressed in kilobytes times ticks of execution, which indicates the amount of memory used by text that was shared with other processes.
An integral value expressed the same way, which is the amount of unshared memory used for data.
An integral value expressed the same way, which is the amount of unshared memory used for stack space.
The number of page faults which were serviced without requiring any I/O.
The number of page faults which were serviced by doing I/O.
The number of times processes was swapped entirely out of main memory.
The number of times the file system had to read from the disk on behalf of processes.
The number of times the file system had to write to the disk on behalf of processes.
Number of IPC messages sent.
Number of IPC messages received.
Number of signals received.
The number of times processes voluntarily invoked a context switch (usually to wait for some service).
The number of times an involuntary context switch took place (because a time slice expired, or another process of higher priority was scheduled).
vtimes is a historical function that does some of what getrusage does. getrusage is a better choice.
vtimes and its vtimes data structure are declared in sys/vtimes.h. int function>vtimes/function> (struct vtimes current, struct vtimes child) vtimes reports resource usage totals for a process.
If current is non-null, vtimes stores resource usage totals for the invoking process alone in the structure to which it points. If child is non-null, vtimes stores resource usage totals for all past children (which have terminated) of the invoking process in the structure to which it points.
function>struct vtimes/function> This data type contains information about the resource usage of a process. Each member corresponds to a member of the struct rusage data type described above.
User CPU time. Analogous to ru_utime in struct rusage
System CPU time. Analogous to ru_stime in struct rusage
Data and stack memory. The sum of the values that would be reported as ru_idrss and ru_isrss in struct rusage
Shared memory. Analogous to ru_ixrss in struct rusage
Maximent resident set size. Analogous to ru_maxrss in struct rusage
Major page faults. Analogous to ru_majflt in struct rusage
Minor page faults. Analogous to ru_minflt in struct rusage
Swap count. Analogous to ru_nswap in struct rusage
Disk reads. Analogous to ru_inblk in struct rusage
Disk writes. Analogous to ru_oublk in struct rusage
The return value is zero if the function succeeds; -1 otherwise.
An additional historical function for examining resource usage, vtimes, is supported but not documented here. It is declared in sys/vtimes.h.