Manejo de procesos en sistemas tipo Linux: prioridades, nice, renice y nohup
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 4,2 KB
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.