Prioridad de ejecución de procesos en Linux

En posts anteriores hemos hablado sobre la importancia del monitoreo de los procesos presentes en un sistema Linux. En esta oportunidad presentaremos el concepto de prioridad de ejecución de procesos y mostraremos cómo modificarla a fin de que aquellos que sean más críticos dispongan de los recursos del sistema según lo necesiten.

Modificar la prioridad de ejecución de procesos

Ya hemos visto que en un momento dado puede haber numerosos procesos corriendo en nuestro sistema (al menos esa es la percepción que tenemos). Probablemente algunos de ellos sean más críticos que otros y por lo tanto deberán poder utilizar los recursos del sistema cuando los necesiten. Esto se logra estableciendo la prioridad de ejecución de procesos, a lo cual hicimos referencia en nuestro post anterior.

Las columnas PR y NI en la salida de top indican la prioridad que se le ha asignado a un proceso en particular -tal como lo ve el kernel en un momento dado- y el valor de niceness del mismo (el cual puede considerarse como una especie de «pista» que se le da al kernel para indicar la prioridad que debe darse inicialmente al proceso), respectivamente. Estos valores están relacionados entre sí: mientras mayor sea la prioridad de un proceso, es menos nice (del inglés bueno) ya que consumirá más recursos del sistema. El valor de niceness puede ubicarse en algún lugar del intervalo comprendido entre -20 y 19.

Finalmente, para modificar la prioridad de un proceso en ejecución, utilizaremos el comando renice. Los usuarios «comunes» (distintos de root) solamente pueden aumentar el valor de niceness correspondientes a un proceso del cual son dueños, mientras que root puede modificar este valor para cualquier proceso sin importar quién sea el usuario dueño del mismo.

Ejemplos

Ahora ilustremos los puntos anteriores:

a) Cambiar la prioridad del proceso con PID 324 (opción -p) a 10:

[pastacode lang=»bash» manual=»renice%20-n%2010%20-p%20324″ message=»» highlight=»» provider=»manual»/]

b) Cambiar la prioridad de todos los procesos del usuario (opción -u) gacanepa a -10:

[pastacode lang=»bash» manual=»renice%20-n%20-10%20-u%20gacanepa» message=»» highlight=»» provider=»manual»/]

El resultado de los comandos anteriores se puede ver en la Fig. 1:

Cambiar la prioridad de un proceso en ejecución
Figura 1 – Cambiar la prioridad de un proceso en ejecución

Por defecto, cualquier nuevo proceso se ejecuta con una prioridad igual a 0. Si deseáramos iniciarlo con una prioridad diferente, podemos hacer uso del comando nice seguido de la opción -n, del nuevo valor de niceness deseado, y del comando a ejecutar.

Por ejemplo, iniciemos top con un valor de niceness igual a 10:

[pastacode lang=»bash» manual=»nice%20-n%2010%20top» message=»» highlight=»» provider=»manual»/]

En la Fig. 2 podemos ver el resultado resaltado en amarillo:

Iniciar un proceso con una prioridad diferente a la asignada por defecto
Figura 2 – Iniciar un proceso con una prioridad diferente a la asignada por defecto

Espero que este post les haya resultado útil. ¡Nos leemos en breve!

Deja una respuesta