Prioridades de procesos en Linux: nice, renice y nohup
Clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 4,2 KB
Actualizado el
Resumen
El documento explica cómo se gestiona la prioridad de los procesos en sistemas tipo UNIX y Linux, y cómo consultarla con ps. Describe los comandos nice y renice para modificar el atributo nice, junto con sus valores y restricciones de permisos. Finalmente, presenta nohup, que permite ejecutar procesos inmunes a la desconexión de la terminal.
Puntos clave
- Todos los procesos de usuario se inician con la misma prioridad inicial, que el sistema varía durante su ejecución.
- En sistemas Linux, valores más altos de prioridad (nice) indican menor prioridad de ejecución.
- El comando ps -l muestra las columnas PRI (prioridad total) y NICE (valor nice).
- nice -n valor comando inicia un proceso con un valor nice modificado, normalmente entre -20 y 20.
- renice cambia la prioridad de un proceso en ejecución; valores entre -1 y -20 requieren permisos de root.
- nohup ejecuta un comando ignorando la señal HUP, de modo que no termina al cerrar la terminal; la salida se guarda en nohup.out.
Resumen generado con IA a partir del documento. Ponte a prueba
PROCESOS: Manejo de procesos en sistemas tipo Linux
Prioridad
En condiciones normales, todos los procesos que iniciamos los usuarios de un sistema UNIX, y de uno LINUX en particular, corren en el sistema con idéntica prioridad inicial. Este atributo, propio de cada proceso, es variado durante la vida del proceso por el sistema operativo, de acuerdo con diferentes algoritmos.
El concepto práctico de aumentar o disminuir la prioridad suele estar, en este tipo de sistemas, invertido respecto de la forma en que naturalmente lo manejamos. Como regla general: los valores más altos de esta propiedad del proceso indican prioridades de ejecución menores.
ps
Con el comando ps podemos observar al menos algunos datos sobre la prioridad de los procesos. Por ejemplo, en la salida de un comando como:
$ ps -l
es usual que tengamos una columna PRI que nos indique la prioridad total, y otra NICE que nos indica el valor del atributo nice del proceso, único sobre el cual podemos incidir a nivel de usuario.
Manipular la prioridad
A nivel de comandos podemos incidir en uno de los atributos con que se calcula la prioridad: nice. Para esto utilizamos los comandos: nice y renice.
Comando nice
Este comando nos permite iniciar un comando con alguna modificación de su valor de nice.
Sintaxis:
$ nice -n valor comando
El parámetro valor nos permite modificar el valor inicial del atributo nice para el proceso. Normalmente, este parámetro puede variar entre -20 y 20, siendo 20 el valor de nice más bajo.
También podemos especificar el valor de nice como un modificador para la ejecución del comando:
$ nice -5 <comando>
Este valor aumenta el valor del atributo nice para el proceso en 5 unidades.
Comando renice
renice cambia la prioridad de un programa que ya está en ejecución.
Sintaxis:
$ renice prioridad -p PID
El parámetro prioridad puede valer 20, en cuyo caso estamos disminuyendo el valor de nice del proceso y, por lo tanto, su prioridad global; puede valer 0, en cuyo caso se recupera el valor base de ese atributo; y puede valer entre -1 y -20, en cuyo caso se asigna al nice del proceso —y consecuentemente a su prioridad total— un valor mayor.
Nota: nice y renice
- Para valores entre -1 y -20 se requieren permisos de root.
- Un usuario común (sin privilegios de root) sólo puede alterar la prioridad de sus procesos.
Inmunidad a desconexión
Normalmente, cuando ejecutamos un proceso —ya sea en foreground o en background— el mismo corre “ligado” a la terminal desde la que fue lanzado. Esto significa que, si cerramos esa terminal, el proceso termina su ejecución junto con el login shell que estaba corriendo sobre esa terminal.
Es posible que se nos haga necesario ejecutar un proceso de forma tal que no dependa de la terminal, ya que puede demorar mucho y, por razones de seguridad, no nos resulta conveniente dejar la terminal “abierta”.
Comando nohup
Para resolver estas situaciones utilizamos el comando nohup. Este comando inicia el proceso sin “ligarlo” a la terminal y con la indicación de que ignore la señal HUP (hangup), que es la que es enviada por el shell antes de finalizar cuando cerramos una terminal. Se suele iniciar en background, ya que necesitamos recuperar el control de la terminal para poder cerrarla.
Sintaxis:
$ nohup <comando> &
El comando recibe como único parámetro la línea de comandos a ejecutar, tal y como si la ejecutáramos directamente sobre el prompt. Si no se redirige la salida, el sistema hace un append de la misma a un archivo de nombre nohup.out en el directorio corriente. Si por algún motivo no puede hacerlo, intenta en $HOME/nohup.out.
Preguntas frecuentes
¿Qué valores de nice requieren permisos de root?
Los valores entre -1 y -20 requieren permisos de root. Un usuario común solo puede alterar la prioridad de sus propios procesos.
¿Para qué sirve el comando nohup?
nohup permite ejecutar un proceso sin ligarlo a la terminal, de forma que siga corriendo aunque la terminal se cierre. Ignora la señal HUP enviada por el shell al cerrarla.
¿Dónde guarda nohup la salida del comando?
Si no se redirige la salida, nohup la añade al archivo nohup.out en el directorio actual. Si no puede escribir allí, usa $HOME/nohup.out.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.