En este artículo vamos a ver cómo administrar las prioridades de ejecución de procesos en Linux. También, veremos brevemente el programador o planificador de procesos del kernel (también conocido como kernel scheduler o process scheduler) y aprenderemos a cómo lanzar y cambiar la prioridad de los procesos.

Qué es el kernel scheduler de Linux

Linux, como la mayoría de sistemas operativos modernos, puede ejecutar múltiples procesos. Esto lo hace compartiendo la CPU y otros recursos entre los procesos.

El kernel scheduler o planificador de procesos es la parte del kernel de Linux que se encarga de ir ordenando los procesos (planificándolos) para ver cuáles son los procesos que deben ejecutarse a continuación. De esta manera distribuye el tiempo de ejecución del procesador entre los diferentes procesos.

Como veremos a continuación, clasifica los procesos en función de los más necesarios (prioridad), aunque también tiene en cuenta otros parámetros.

La prioridad de procesos en Linux

En Linux hay un total de 140 valores  de prioridades, aunque se dividen en dos rangos o tipos de prioridad distintos:

  • El primero es parámetro de nice, también conocido como nivel de cortesía, que va de -20 (valor de prioridad más alta) a 19 (valor de prioridad más baja). El valor predeterminado es 0.
  • La otra, es la prioridad en tiempo real, que oscila entre 1 y 99

Cómo comprobar la prioridad de los procesos

Como para casi todo en Linux, tenemos distintos comandos para poder conocer los valores de prioridad de los procesos que están ejecutándose. En este caso, vamos a utilizar ps, top y htop.

Con ps:

ps -eo pid, ppid, ni, com
como-establecer-prioridad-ejecucion-procesos-gnu-linux-nice-renice-ps

Comando ps -eo pid,ppid,ni,comm

También podemos ver los valores de nice con top y htop:

como-establecer-prioridad-ejecucion-procesos-gnu-linux-nice-renice-top

Comando top

como-establecer-prioridad-ejecucion-procesos-gnu-linux-nice-renice-htop

Comando htop

Notas:
PR en top es lo mismo que PRI en htop.
La prioridad rt, significa que el proceso se está ejecutando con prioridad de ejecución en tiempo real.

Diferencia entre PR o PRI y NI

Vamos a ver qué significa cada cosa:

  • NI: es el valor de amabilidad o cortesía (nice) que hemos visto antes, a nivel del espacio de usuario (user-space)
  • PR o PRI: es la prioridad real del proceso, a nivel del kernel de Linux.

Cómo ejecutar un comando con prioridad de ejecución determinada (comando nice)

Vamos a ver cómo lanzar procesos o comandos con una prioridad determinada.

Para ello se usa el comando nice, que tiene las siguientes sintaxis:

nice -n valor-nice [argumentos]
nice -valor-nice [argumentos]
nice --adjustment = valor-nice [argumentos]

A mi la forma que más fácil me resulta es la primera, por ejemplo si quiero lanzar un script con poca prioridad (alto valor de cortesía) lanzaría:

nice -n 19 ./script

Hay que tener en cuenta que:

  • Sin lanzamos un comando normal, sin nice, la prioridad por defecto es de 0.
  • Si lanzamos un comando con nice, pero no le damos ningún valor, la prioridad por defecto es de 10.
  • Solo el usuario root puede ejecutar un comando con una prioridad mayor (menor amabilidad) que 0.

Cómo cambiar la prioridad de un comando en ejecución (comando renice)

Una característica importante de Linux es la programación dinámica basada en prioridades, que permite que el valor nice se modifique (aumente o disminuya) según sus necesidades, para ello usaremos el comando renice (con la misma sintaxis que nice aunque apuntando al PID del proceso).

renice -n -valor-nice -p (PID)

Por ejemplo:

renice -n -19 -p 2500

Si te encuentras muy a menudo utilizando los comando nice y renice, es posible que te venga bien cambiar los valores por defecto de la prioridad para un usuario en particular. Para ello dirígete al fichero /etc/security/limits.conf y fija los nuevos valores según la sintaxis: <dominio> <tipo> <item> <valor>.

Publicidad

Artículos Relacionados