Provided by: manpages-es_1.55-10_all bug

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)