182 lines
5.7 KiB
Groff
182 lines
5.7 KiB
Groff
|
.\" Copyright (c) 1980, 1991 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. All advertising materials mentioning features or use of this software
|
||
|
.\" must display the following acknowledgement:
|
||
|
.\" This product includes software developed by the University of
|
||
|
.\" California, Berkeley and its contributors.
|
||
|
.\" 4. 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 6.7 (Berkeley) 3/10/91
|
||
|
.\"
|
||
|
.Dd March 10, 1991
|
||
|
.Dt GETRLIMIT 2
|
||
|
.Os BSD 4
|
||
|
.Sh NAME
|
||
|
.Nm getrlimit ,
|
||
|
.Nm setrlimit
|
||
|
.Nd control maximum system resource consumption
|
||
|
.Sh SYNOPSIS
|
||
|
.Fd #include <sys/time.h>
|
||
|
.Fd #include <sys/resource.h>
|
||
|
.Ft int
|
||
|
.Fn getrlimit "int resource" "struct rlimit *rlp"
|
||
|
.Ft int
|
||
|
.Fn setrlimit "int resource" "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.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fa resource
|
||
|
parameter is one of the following:
|
||
|
.Bl -tag -width RLIMIT_FSIZEAA
|
||
|
.It Dv RLIMIT_CPU
|
||
|
the maximum amount of cpu time (in seconds) to be used by
|
||
|
each process.
|
||
|
.It Dv RLIMIT_FSIZE
|
||
|
the largest size, in bytes, of any single file that may be created.
|
||
|
.It Dv 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 Dv 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.
|
||
|
.It Dv RLIMIT_CORE
|
||
|
the largest size, in bytes, of a
|
||
|
.Xr core
|
||
|
file that may be created.
|
||
|
.It Dv 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.
|
||
|
.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 {
|
||
|
int rlim_cur; /* current (soft) limit */
|
||
|
int 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
|
||
|
(0x7\&f\&f\&f\&f\&f\&f\&f).
|
||
|
.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;
|
||
|
.Ic limit
|
||
|
is thus a built-in command to
|
||
|
.Xr csh 1 .
|
||
|
.Pp
|
||
|
The system refuses to extend the data or stack space when the limits
|
||
|
would be exceeded in the normal way: a
|
||
|
.Xr break
|
||
|
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. A return value of -1 indicates
|
||
|
that an error occurred, and an error code is stored in the global
|
||
|
location
|
||
|
.Va errno .
|
||
|
.Sh ERRORS
|
||
|
.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 EPERM
|
||
|
The limit specified to
|
||
|
.Fn setrlimit
|
||
|
would have
|
||
|
raised the maximum limit value, and the caller is not the super-user.
|
||
|
.El
|
||
|
.Sh SEE ALSO
|
||
|
.Xr csh 1 ,
|
||
|
.Xr quota 2 ,
|
||
|
.Xr sigvec 2 ,
|
||
|
.Xr sigstack 2
|
||
|
.Sh BUGS
|
||
|
There should be
|
||
|
.Ic limit
|
||
|
and
|
||
|
.Ic unlimit
|
||
|
commands in
|
||
|
.Xr sh 1
|
||
|
as well as in
|
||
|
.Xr csh .
|
||
|
.Sh HISTORY
|
||
|
The
|
||
|
.Nm
|
||
|
function call appeared in
|
||
|
.Bx 4.2 .
|