Si bien es posible lanzar procesos indicando la prioridad en Linux, existen casos en los que necesitamos cambiar la prioridad de un proceso en ejecución. Para eso existe el comando renice.
renice [-n] <niceness> [-p|-g|-u] <identificadores>
donde identificadores
se corresponde con:
- un conjunto de ids de proceso (pid) si no se especifica parámetro o se precede por -p
- un conjunto de id de grupo de proceso si se precede por -g
- un conjunto de usuarios si se precede por -u.
Los usuarios que no sean el superusuario sólo pueden bajar la prioridad de sus procesos, es decir, aumentar su niceness (en el rango de 0 a 19). El superusuario (root) puede ajustar la prioridad de cualquier proceso usando un valor nice del rango completo (-20 a 19).
Ejemplo
Suponiendo que se está importando una base de datos y este proceso está consumiendo mucha CPU, obtenemos su PID (process id) mediante top
o pgrep
, y le bajamos la prioridad ejecutando desde la consola
$ renice +5 2119 2119 (process ID) old priority 0, new priority 5
Podemos repetir la operación, si la prioridad establecida no fuera suficientemente baja:
$ renice +7 2119 2119 (process ID) old priority 5, new priority 7
De esta manera, es posible que el proceso demore un poco más en terminar su ejecución, pero al mismo tiempo, otros tendrán más CPU disponible.
Ahora bien, si después de un rato vemos que no se concretara, podríamos intentar incrementar su prioridad haciendo:
$ renice 0 2119 renice: failed to set priority for 2119 (process ID): Permission denied
Esta acción falla debido a que para bajar el valor nice es necesario ser superusuario:
$ sudo renice 0 2119 2119 (process ID) old priority 10, new priority 0
Solo con el superusuario podemos establecer un niceness < 0:
$ sudo renice -5 2119 2119 (process ID) old priority 0, new priority -5
También te puede interesar: