2012-11-15 12:06:41 +01:00
|
|
|
.\" $NetBSD: getrlimit.2,v 1.36 2012/06/09 02:36:25 christos Exp $
|
2011-02-14 20:36:03 +01:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 1980, 1991, 1993
|
|
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\" 3. Neither the name of the University nor the names of its contributors
|
|
|
|
.\" may be used to endorse or promote products derived from this software
|
|
|
|
.\" without specific prior written permission.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
.\" SUCH DAMAGE.
|
|
|
|
.\"
|
|
|
|
.\" @(#)getrlimit.2 8.1 (Berkeley) 6/4/93
|
|
|
|
.\"
|
2012-11-15 12:06:41 +01:00
|
|
|
.Dd June 8, 2012
|
2011-02-14 20:36:03 +01:00
|
|
|
.Dt GETRLIMIT 2
|
|
|
|
.Os
|
|
|
|
.Sh NAME
|
|
|
|
.Nm getrlimit ,
|
|
|
|
.Nm setrlimit
|
|
|
|
.Nd control maximum system resource consumption
|
|
|
|
.Sh LIBRARY
|
|
|
|
.Lb libc
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.In sys/resource.h
|
|
|
|
.Ft int
|
|
|
|
.Fn getrlimit "int resource" "struct rlimit *rlp"
|
|
|
|
.Ft int
|
|
|
|
.Fn setrlimit "int resource" "const struct rlimit *rlp"
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
Limits on the consumption of system resources by the current process
|
|
|
|
and each process it creates may be obtained with the
|
|
|
|
.Fn getrlimit
|
|
|
|
call, and set with the
|
|
|
|
.Fn setrlimit
|
|
|
|
call.
|
|
|
|
Resources of an arbitrary process can be obtained/changed using
|
|
|
|
.Xr sysctl 3 .
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fa resource
|
|
|
|
parameter is one of the following:
|
|
|
|
.Bl -tag -width RLIMIT_FSIZEAA
|
|
|
|
.It Li RLIMIT_AS
|
|
|
|
The maximum amount (in bytes) of virtual memory the process is allowed to map.
|
|
|
|
.It Li RLIMIT_CORE
|
|
|
|
The largest size (in bytes)
|
|
|
|
.Pa core
|
|
|
|
file that may be created.
|
|
|
|
.It Li RLIMIT_CPU
|
|
|
|
The maximum amount of CPU time (in seconds) to be used by
|
|
|
|
each process.
|
|
|
|
.It Li RLIMIT_DATA
|
|
|
|
The maximum size (in bytes) of the data segment for a process;
|
|
|
|
this defines how far a program may extend its break with the
|
|
|
|
.Xr sbrk 2
|
|
|
|
system call.
|
|
|
|
.It Li RLIMIT_FSIZE
|
|
|
|
The largest size (in bytes) file that may be created.
|
|
|
|
.It Li RLIMIT_MEMLOCK
|
|
|
|
The maximum size (in bytes) which a process may lock into memory
|
|
|
|
using the
|
|
|
|
.Xr mlock 2
|
|
|
|
function.
|
|
|
|
.It Li RLIMIT_NOFILE
|
|
|
|
The maximum number of open files for this process.
|
|
|
|
.It Li RLIMIT_NPROC
|
|
|
|
The maximum number of simultaneous processes for this user id.
|
2012-11-15 12:06:41 +01:00
|
|
|
.It Li RLIMIT_NTHR
|
|
|
|
The maximum number of simultaneous threads (Lightweight Processes) for this
|
|
|
|
user id.
|
|
|
|
Kernel threads and the first thread of each process are not counted against
|
|
|
|
this limit.
|
2011-02-14 20:36:03 +01:00
|
|
|
.It Li RLIMIT_RSS
|
|
|
|
The maximum size (in bytes) to which a process's resident set size may
|
|
|
|
grow.
|
|
|
|
This imposes a limit on the amount of physical memory to be given to
|
|
|
|
a process; if memory is tight, the system will prefer to take memory
|
|
|
|
from processes that are exceeding their declared resident set size.
|
|
|
|
.It Li RLIMIT_SBSIZE
|
|
|
|
The maximum size (in bytes) of the socket buffers
|
|
|
|
set by the
|
|
|
|
.Xr setsockopt 2
|
|
|
|
.Dv SO_RCVBUF
|
|
|
|
and
|
|
|
|
.Dv SO_SNDBUF
|
|
|
|
options.
|
|
|
|
.It Li RLIMIT_STACK
|
|
|
|
The maximum size (in bytes) of the stack segment for a process;
|
|
|
|
this defines how far a program's stack segment may be extended.
|
|
|
|
Stack extension is performed automatically by the system.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
A resource limit is specified as a soft limit and a hard limit.
|
|
|
|
When a soft limit is exceeded a process may receive a signal (for example,
|
|
|
|
if the CPU time or file size is exceeded), but it will be allowed to
|
|
|
|
continue execution until it reaches the hard limit (or modifies
|
|
|
|
its resource limit).
|
|
|
|
The
|
|
|
|
.Em rlimit
|
|
|
|
structure is used to specify the hard and soft limits on a resource,
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
struct rlimit {
|
|
|
|
rlim_t rlim_cur; /* current (soft) limit */
|
|
|
|
rlim_t rlim_max; /* hard limit */
|
|
|
|
};
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
Only the super-user may raise the maximum limits.
|
|
|
|
Other users may only alter
|
|
|
|
.Fa rlim_cur
|
|
|
|
within the range from 0 to
|
|
|
|
.Fa rlim_max
|
|
|
|
or (irreversibly) lower
|
|
|
|
.Fa rlim_max .
|
|
|
|
.Pp
|
|
|
|
An
|
|
|
|
.Dq infinite
|
|
|
|
value for a limit is defined as
|
|
|
|
.Dv RLIM_INFINITY .
|
|
|
|
.Pp
|
|
|
|
Because this information is stored in the per-process information,
|
|
|
|
this system call must be executed directly by the shell if it
|
|
|
|
is to affect all future processes created by the shell.
|
|
|
|
Thus, shells provide built-in commands to change the limits
|
|
|
|
.Ic ( limit
|
|
|
|
for
|
|
|
|
.Xr csh 1 ,
|
|
|
|
or
|
|
|
|
.Ic ulimit
|
|
|
|
for
|
|
|
|
.Xr sh 1 ) .
|
|
|
|
.Pp
|
|
|
|
The system refuses to extend the data or stack space when the limits
|
|
|
|
would be exceeded in the normal way: a
|
|
|
|
.Xr brk 2
|
|
|
|
call fails if the data space limit is reached.
|
|
|
|
When the stack limit is reached, the process receives
|
|
|
|
a segmentation fault
|
|
|
|
.Pq Dv SIGSEGV ;
|
|
|
|
if this signal is not
|
|
|
|
caught by a handler using the signal stack, this signal
|
|
|
|
will kill the process.
|
|
|
|
.Pp
|
|
|
|
A file I/O operation that would create a file larger that the process'
|
|
|
|
soft limit will cause the write to fail and a signal
|
|
|
|
.Dv SIGXFSZ
|
|
|
|
to be
|
|
|
|
generated; this normally terminates the process, but may be caught.
|
|
|
|
When the soft CPU time limit is exceeded, a signal
|
|
|
|
.Dv SIGXCPU
|
|
|
|
is sent to the
|
|
|
|
offending process.
|
|
|
|
.Sh RETURN VALUES
|
|
|
|
A 0 return value indicates that the call succeeded, changing
|
|
|
|
or returning the resource limit.
|
|
|
|
Otherwise, \-1 is returned and the global variable
|
|
|
|
.Va errno
|
|
|
|
is set to indicate the error.
|
|
|
|
.Sh ERRORS
|
|
|
|
The
|
|
|
|
.Fn getrlimit
|
|
|
|
and
|
|
|
|
.Fn setrlimit
|
|
|
|
will fail if:
|
|
|
|
.Bl -tag -width Er
|
|
|
|
.It Bq Er EFAULT
|
|
|
|
The address specified for
|
|
|
|
.Fa rlp
|
|
|
|
is invalid.
|
|
|
|
.It Bq Er EINVAL
|
|
|
|
Specified
|
|
|
|
.Fa resource
|
2012-11-15 12:06:41 +01:00
|
|
|
was invalid; or, in the
|
2011-02-14 20:36:03 +01:00
|
|
|
.Fn setrlimit
|
|
|
|
call, the specified
|
|
|
|
.Fa rlim_cur
|
|
|
|
exceeds the specified
|
|
|
|
.Fa rlim_max .
|
|
|
|
.It Bq Er EPERM
|
|
|
|
The limit specified to
|
|
|
|
.Fn setrlimit
|
|
|
|
would have
|
|
|
|
raised the maximum limit value, and the caller is not the super-user.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn setrlimit
|
|
|
|
function may fail if:
|
|
|
|
.Bl -tag -width Er
|
|
|
|
.It Bq Er EINVAL
|
|
|
|
The limit specified to
|
|
|
|
.Fn setrlimit
|
|
|
|
cannot be lowered, because current usage is already higher than the limit.
|
|
|
|
.El
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr csh 1 ,
|
|
|
|
.Xr sh 1 ,
|
|
|
|
.Xr mlock 2 ,
|
|
|
|
.Xr setsockopt 2 ,
|
|
|
|
.Xr sigaction 2 ,
|
|
|
|
.Xr sigaltstack 2 ,
|
2012-11-15 12:06:41 +01:00
|
|
|
.Xr libquota 3 ,
|
2011-02-14 20:36:03 +01:00
|
|
|
.Xr sysctl 3
|
|
|
|
.\" Sh STANDARDS
|
|
|
|
.\" With exception of
|
|
|
|
.\" .Li RLIMIT_AS
|
|
|
|
.\" (which is not currently supported), the
|
|
|
|
.\" .Fn getrlimit
|
|
|
|
.\" and
|
|
|
|
.\" .Fn setrlimit
|
|
|
|
.\" functions conform to
|
|
|
|
.\" .St -susv2 .
|
|
|
|
.Sh HISTORY
|
|
|
|
The
|
|
|
|
.Fn getrlimit
|
|
|
|
function call appeared in
|
|
|
|
.Bx 4.2 .
|
2012-11-15 12:06:41 +01:00
|
|
|
.Sh BUGS
|
|
|
|
The resource limit
|
|
|
|
.Dv RLIMIT_RSS
|
|
|
|
is not implemented in
|
|
|
|
.Xr uvm 9
|
|
|
|
which means that process memory size limits are not enforced.
|