Bueno, la mayor parte de las veces los límites los impone el sistema operativo, para que no haya ningún proceso acapare todos los recursos, y los demás procesos queden "congelados".
En Linux, normalmente, los procesos son arrancados por un proceso shell. En el shell bash existe el comando
ulimit que permite ajustar los límites de los recursos que puede usar el proceso del shell y los procesos que éste arrancará.
Por ejemplo, si hacemos
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 19717
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) 2155428
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 19717
virtual memory (kbytes, -v) 2870400
file locks (-x) unlimited
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
ulimit nos informa de los todos los límites que están puestos por defecto. Como propietarios de este shell, podemos modificar algunas condiciones. Por ejemplo, decir que en vez de poder reservar 2Gb de memoria, podremos reservar todo lo que el sistema pueda darnos:
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> ulimit -m unlimited
explorer@casa:~/Documentos/Desarrollo> ulimit -m
unlimited
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Así que, tú mismo podrías colocar una instrucción ulimit en alguno de los ficheros de arranque del shell del usuario que va a ejecutar el proceso, para ajustarlo a tus necesidades (.profile, .bashrc).
A nivel de sistema, podemos dar límites según el usuario o grupo al que pertenezca ese usuario. De ello se encarga el módulo
pam_limits (
man pam_limits), que toma sus valores por defecto del fichero
/etc/security/limits.conf y de los ficheros contenidos dentro del directorio
/etc/security/limits.d/. La definición de estos ficheros la tienes en
man 5 limits.conf.
Otra cosa es privilegiar a tu proceso frente a otros. Para eso necesitas tener privilegios de superusuario (o root). Con el comando
renice se puede ajustar la prioridad de un proceso que ya se está ejecutando. Y con el comando
nice se puede ajustar la prioridad de un proceso que vamos a ejecutar.