Provided by:
manpages-es_1.55-10_all 
NOMBRE
getrlimit, getrusage, setrlimit - devuelve/establece el limite de
recursos y su utilizacion
SINOPSIS
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
int getrlimit(int resource, struct rlimit *rlim);
int getrusage(int who, struct rusage *usage);
int setrlimit(int resource, const struct rlimit *rlim);
DESCRIPCI'ON
getrlimit y setrlimit devuelve / establece el limite de recursos,
respectivamente. Cada recurso tiene asociado un limite flexible y otro
estricto, tal como se define en la estructura rlimit (el argumento rlim
de las rutinas getrlimit() y setrlimit()):
struct rlimit {
rlim_t rlim_cur; /* Limite flexible (Soft limit) */
rlim_t rlim_max; /* Limite estricto (Hard limit)
(tope para rlim_cur) */
};
El limite flexible es el valor que impone el nucleo para el recurso
correspondiente. El limite estricto actua como un tope para el limite
flexible: un proceso no privilegiado puede solamente establecer su
limite flexible a un valor comprendido entre 0 y el limite estricto, y
(irreversiblemente) menor que su limite estricto. Un proceso
privilegiado puede hacer cualquier cambio sobre ambos valores limite.
El valor RLIM_INFINITY no impone ningun limite sobre un recurso (tanto
en la estructura devuelta por getrlimit() como en la estructura pasada
a setrlimit()).
resource debe ser uno de los siguientes valores:
RLIMIT_CPU
Tiempo de CPU en segundos. Cuando el proceso alcanza el limite
flexible, se le envia una senal SIGXCPU. La accion por defecto
para esta senal es terminar el proceso. Sin embargo, la senal
puede ser atrapada, y el manejador puede devolver el control al
programa principal. Si el proceso continua consumiendo tiempo
de CPU, se le enviara SIGXCPU una vez por segundo hasta que se
alcance el limite estricto, momento en el cual se le enviara la
senal SIGKILL. (Este ultimo punto describe el comportamiento de
Linux 2.2 y 2.4. Las implementaciones varian en el tratamiento
de los procesos que continuna consumiendo tiempo de CPU despues
de alcanzar el limite flexible. Las aplicaciones portables que
necesiten atrapar esta senal deberian realizar una terminacion
ordenada despues de recibir la primera senal SIGXCPU.)
RLIMIT_DATA
El tamano maximo del segmento de datos del proceso (datos
inicializados, no inicializados y el monticulo). Este limite
afecta a las llamadas a brk() and sbrk(), que fallan con el
error ENOMEM al llegarse al limite flexible de este recurso.
RLIMIT_FSIZE
El tamano maximo de los ficheros que puede crear el proceso.
Los intentos por sobrepasar este limite provocan la comunicacion
de una senal SIGXFSZ. Por defecto, esta senal termina el
proceso, pero un proceso puede atrapar esta senal en su lugar,
en cuyo caso la llamada al sistema relevante (p.e., write(),
truncate()) falla con el error EFBIG.
RLIMIT_LOCKS
Un limite sobre el numero combinado de bloqueos flock() y
arrendamientos fcntl() que este proceso puede establecer (Linux
2.4 y posteriores).
RLIMIT_MEMLOCK
El numero maximo de bytes de memoria virtual que pueden ser
bloqueados en RAM usando mlock() y mlockall().
RLIMIT_NOFILE
Especifica un valor que es el numero maximo de descriptor de
fichero que puede ser abierto por este proceso. Los intentos de
(open(), pipe(), dup(), etc.) por exceder este limite
provocaran el error EMFILE.
RLIMIT_NPROC
El numero maximo de procesos que pueden ser creados por el
identificador de usuario real del proceso invocador. Al
alcanzar este limite, fork() falla con el error EAGAIN.
RLIMIT_RSS
Especifica el limite (en paginas) del conjunto residente del
proceso (el numero de paginas virtuales residentes en RAM).
Este limite solo tiene efecto en Linux 2.4 en adelante, y solo
afecta a las llamadas a madvise() especificando
MADVISE_WILLNEED.
RLIMIT_STACK
El tamano maximo de la pila del proceso, en bytes. Al alcanzar
este limite, se genera una senal SIGSEGV. Para manejar esta
senal, un proceso debe emplear una pila de senales alternativa
(sigaltstack(2)).
RLIMIT_OFILE es el nombre BSD para RLIMIT_NOFILE.
getrusage devuelve la utilizacion actual de los recursos, para un who
de cualquiera de los siguientes, bien RUSAGE_SELF oo RUSAGE_CHILDREN.
struct rusage {
struct timeval ru_utime; /* tiempo de usuario utilizado */
struct timeval ru_stime; /* tiempo de sistema utilizado */
long ru_maxrss; /* tamano maximo de la parte
establecida como residente */
long ru_ixrss; /* tamano total de la memoria
compartida */
long ru_idrss; /* tamano total de la memoria
no compartida */
long ru_isrss; /* tamano de pila no compartido */
long ru_minflt; /* peticiones de pagina */
long ru_majflt; /* fallos de pagina */
long ru_nswap; /* intercambios */
long ru_inblock; /* operaciones de entrada de
bloques */
long ru_oublock; /* operaciones de salida de
bloques */
long ru_msgsnd; /* mensajes enviados */
long ru_msgrcv; /* mensajes recibidos */
long ru_nsignals; /* senales recibidas */
long ru_nvcsw; /* cambios de contexto
voluntarios */
long ru_nivcsw; /* cambios de contexto
involuntarios */
};
VALOR DEVUELTO
Si tiene exito, devuelve cero. Si hay error, devuelve -1, y errno toma
el correspondiente valor.
ERRORES
EFAULT rlim o usage apuntan fuera del espacio de direcciones accesible.
EINVAL getrlimit o setrlimit es llamado con un resource erroneo, o
getrusage es llamado con un who erroneo.
EPERM Un no-superusuario intenta utilizar setrlimit() para incrementar
el limite `flexible' o `estricto' por encima del limite estricto
actual, o un superusuario intenta incrementar RLIMIT_NOFILE por
encima del maximo actual del nucleo.
CONFORME A
SVr4, BSD 4.3
NOTA
Incluir <sys/time.h> no es necesario actualmente, pero incrementa la
transportabilidad. (De hecho, struct timeval esta definida en
<sys/time.h>.)
En Linux, si la accion asociada a SIGCHLD es SIG_IGN los usos del
recurso por los procesos hijo son incluidos automaticamente en el valor
devuelto por RUSAGE_CHILDREN, aunque POSIX 1003.1-2001 prohibe esto
explicitamente.
La estructura de arriba fue tomada de BSD 4.3 Reno. No todos los
campos son significativos bajo Linux. En la actualidad (Linux 2.4)
solo los campos ru_utime, ru_stime, ru_minflt, ru_majflt, y ru_nswap
son mantenidos.
V'EASE TAMBI'EN
dup(2), fcntl(2), fork(2), mlock(2), mlockall(2), mmap(2), open(2),
quotactl(2), sbrk(2), wait3(2), wait4(2), malloc(3), ulimit(3),
signal(7)