The getrlimit(2) and setrlimit(2) calls control
the consumption of resources by the calling process.
This is only a partial implementation; see the NOTES below.
A call to one of these functions identifies a resource to
be operated on as well as a resource limit (referenced by
rlp, a pointer to a struct rlimit).
The resource limit structure is defined in
<sys/resource.h>; the current or soft limit is
specified in rlim_cur, and the maximum or hard limit is
specified in rlim_max. A process may set the soft limit to
any value less than or equal to the hard limit, or lower the hard
limit down to the current soft limit. Both the soft and hard limits
can be changed in the same setrlimit(2) call, so long as the value of
rlim_cur never exceeds the value of rlim_max.
The header file <sys/resource.h> also defines the
value RLIM_INFINITY. This is considered to be larger than any other
limit value, so if passed as an argument to setrlimit(2), that
resource is not limited. If RLIM_INFINITY is returned by a call to
getrlimit(2), then the system doesn't enforce any
limits on that resource.
The getrlimit(2) and setrlimit(2) calls deal with
the following resources:
RLIMIT_CORE
The maximum size, in bytes, of a core file created by this
process. If the core file will be larger than RLIMIT_CORE, the
write is terminated at this value. If the limit is set to 0, then
no core files are created.
RLIMIT_CPU
The maximum time, in seconds, of CPU time a process can use. If
the process exceeds this time, the system generates SIGXCPU for the
process. If the process is blocking, catching, or ignoring SIGXCPU,
then ?
RLIMIT_DATA
Maximum size in bytes of a process' data segment. If the data
segment grows larger than this value, the functions brk(3), malloc(3), and
sbrk(3)
will fail with errno set to ENOMEM.
RLIMIT_FSIZE
The maximum size, in bytes, of a file created by a process. If
the limit is 0, the process cannot create a file. If a write or
truncation call exceeds the limit, the system generates SIGXFSZ for
the process. If the process is catching, ignoring, or blocking
SIGXFSZ, then attempts to increase the size of the file will fail
with errno set to EFBIG.
RLIMIT_NOFILE
The highest possible value for a file descriptor, plus one.
This limits the number of file descriptors a process may allocate.
If more than RLIMIT_NOFILE files are allocated, functions
allocating new file descriptors may fail with the error
EMFILE.
RLIMIT_STACK
The maximum size, in bites, of a process' stack. The stack
won't automatically grow past this limit; if a process tries to
exceed the limit, the system genereates SIGSEGV for the process. If
the process is ignoring or blocking SIGSEGV, or is catching it
without having an alternate stack, then disposition of SIGSEGV is
set to SIG_DFL before it's generated.
RLIMIT_AS
Maximum size in bytes of a process' total available memory. If
this limit is exceeded, the memory functions brk(3), malloc(3), mmap(2), and
sbrk(3)
fail with errno set to ENOMEM, and automatic stack growth
will fail as described for RLIMIT_STACK.
The resource was invalid. In a setrlimit(2) call, this
error can also mean that rlim_cur exceeds the
rlim_max, or that the limit cannot be lowered because the
current usage is already higher than the limit. It can also mean
that the underlying device in a getrlimit(2) call does not
support the operation.
[EPERM]
The process doesn't have privileges to raise the maximum limit
value.