int getrlimit (int resource, struct rlimit *rlim);
int getrusage (int who, struct rusage *usage);
int setrlimit (int resource, const struct rlimit *rlim);
RLIMIT_CPU /* CPU time in ms */
RLIMIT_FSIZE /* Maximum filesize */
RLIMIT_DATA /* max data size */
RLIMIT_STACK /* max stack size */
RLIMIT_CORE /* max core file size */
RLIMIT_RSS /* max resident set size */
The following are not yet implemented [Documenter's note: as of when?]:
RLIMIT_MEMLOCK /* max locked-in-memory address space*/
RLIMIT_NPROC /* max number of processes */
RLIMIT_OFILE /* max number of open files */
A resource may unlimited if you set the limit to RLIM_INFINITY.
The rlimit structure is defined as follows :
struct rlimit { int rlim_cur; int rlim_max; };
getrusage returns the current resource usages, for a who of either RUSAGE_SELF or RUSAGE_CHILDREN.
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 */ };