En sistemas Unix-like como GNU/Linux, la prioridad de procesos, se utiliza para decidir la cantidad de tiempo que el proceso podrá utilizar el procesador, por intervalo de tiempo. Explicando un poco más, el/los procesadores son compartidos por varios procesos (los procesos van alternándose en el uso del o de los procesadores) dando la sensación al usuario que todas las aplicaciones, tareas, procesos se ejecutan a la vez, pues bien la prioridad le dice al sistema que procesos pueden utilizar mas tiempo de procesador y que procesos pasan a un segundo lugar. Esto puede llegar a ocasionar que la ejecución de algún/os proceso/s no llegue/n a ejecutarse nunca, ya que van siendo desplazados en la cola de procesos hacia el final por otros procesos con una prioridad mayor.

Cada proceso en el sistema está corriendo con prioridades definidas (llamadas también “nice value”). Este valor puede variar desde -20 a +19. La máxima prioridad para los procesos es -20. Si no está definido, cada proceso correrá con prioridad 0 de manera predeterminada (la prioridad “base” para la administración de procesos) Los procesos con prioridad máxima (cualquier valor negativo hasta -20) usan más recursos del sistema que otros. Los procesos con prioridad mínima (+19) funcionarán cuando otras tareas no usen el sistema. Los usuarios que no sean el superusuario sólo pueden bajar la prioridad de los procesos que poseen en el rango de 0 a 19. El superusuario (root) puede ajustar la prioridad de los procesos a cualquier valor.

No debe olvidarse: Mayor prioridad -20 (menos veinte) y Menor prioridad +19 (más diecinueve). Si iniciamos un programa normalmente, y no hay ninguna configuración para el usuario o grupo que lo modifique, este se iniciará con prioridad 0 (cero).

Cambiando la prioridad de los procesos

A continuación veremos par de comandos que nos permitirán lanzar una aplicación con una prioridad predeterminada por nosotros (nice) o modificar la prioridad de un proceso ya ejecutado (renice). Lo que leerás a continuación no es nada que no hubieras podido conocer tu mismo usando un simple man nice y man renice.

renice

Por una cuestión meramente didáctica, empezaremos con renice.

Si uno o más procesos usan muchos recursos del sistema, Usted puede cambiar las prioridades de los mismos en vez de terminarlos. Para tales tareas se puede usar el comando renice. La sintaxis del mismo es como sigue...

renice prioridad [[-p] pid ...] [[-g] pgrp ...] [[-u] usuario ...]

… donde prioridad es el valor de la prioridad, pid (use la opción -p para múltiples procesos) es el ID del proceso, pgrp (precedido por la opción -g si son varios) es el ID de grupo del proceso, y usuario (-u para más de uno) es el nombre de usuario del dueño del proceso.

Resumiendo, las opciones soportadas por renice son:

-g Forzar que los parámetros quién sean interpretados como ID’s de grupo de proceso.
-u Forzar que los parámetros quién sean interpretados como nombres de usuario.
-p Reinicia la interpretación de quién para que sea la de ID de proceso (por defecto).

Un sencillo ejemplo

Supongamos que un colega tiene corriendo un proceso con PID 785, y dicho proceso realiza una operación científica compleja, y mientras el proceso está trabajando, el usuario desea jugar un juego (WoW, DOTA o lo que sea que se le antoje jugar en su GNU/Linux). En este ejemplo, como para el colega lo principal ahora es jugar y no le apura la operación compleja del proceso mencionado, para que no se parta la PC por la mitad, puede teclear:

renice +15 785

En este caso, se ha disminuido la prioridad del proceso, y aunque tardará mas tiempo en terminar de hacerse la operación científica (o quizás el usuario estaba compilando un servidor de WoW), al menos permitirá que otras operaciones puedan realizarse, es decir, podrá jugar sin incendiar su microprocesador.

Recordemos que los sistemas GNU/Linux tienen como característica la capacidad de ser multiusuarios (permiten proveer servicio y procesamiento a múltiples usuarios simultáneamente). En este entorno puede aprovecharse el comando renice. Si usted es el administrador del sistema y nota que algún usuario está corriendo muchos procesos que utilizan muchos recursos del sistema, puede cambiar la prioridad de los procesos de dicho usuario con un único comando:

renice +19 -u fulano

Luego de esto, todos los procesos de fulano tendrán la prioridad menor y no obstruirán procesos de otros usuarios.

nice

Ahora que conocemos como cambiar la prioridad de los procesos ya ejecutados, probaremos a ejecutar un proceso con una prioridad predefinida por nosotros. Para esto, utilizaremos el comando nice.

En este caso debe especificar su comando como una opción para nice. De manera predeterminada nice ajusta una prioridad de 10. El rango va desde -20 (prioridad mayor) a 19 (menor) La opción -n se usa para ajustar el valor de la prioridad.

Un sencillo ejemplo

Supongamos que otro usuario haya estado alejado de GNU/Linux mientras le llega un nuevo ordenador, de manera que ha tenido que usar otros ordenadores con sistema operativo Windows, situación que confiesa le resulta incómoda. Imaginemos que nuestro nuevo amigo consigue sentarse frente a otro ordenador con GNU/Linux (supongamos sea Puppy Linux o Slitaz la distro seleccionada) y aprovecha para hacer una copia de un DVD físico de Ubuntu 17.04 (simple, crear un ISO). Desde la consola esto puede hacerlo tecleando lo siguiente:

dd if=/dev/cdrom of=~/ubuntu-17.04-desktop-amd64.iso

En algunos sistemas con un CD-ROM común, el proceso de la copia de un volumen grande de información puede utilizar muchos recursos del sistema y olvidábamos que en ese momento el usuario está haciendo labores ofimaticas como por ejemplo trabajos con documentos de miles de hojas en LibreOffice, un verdadero tragón de recursos. El usuario puede hacer el respaldo del DVD sin afectar el rendimiento de LibreOffice. Para esto puede ejecutar el comando dd con una prioridad baja usando nice

nice -n 19 dd if=/dev/cdrom of=~/ubuntu-17.04-desktop-amd64.iso

… y nuestro amigo podrá seguir redactando en LibreOffice mientras hace el respaldo del DVD de Ubuntu sin achicharrar el microprocesador del modesto ordenador que le prestaron momentáneamente.

Truquillo final: Para cambiar la prioridad de un proceso también podemos usar top. Usaremos la tecla r dentro de la interfaz de top para cambiar la prioridad de cualquier proceso.





Acerca del Autor
Maikel Llamaret HerediaMaikel Llamaret Heredia: Creador y actual Mantenedor del Proyecto SWL-X. Desarrollador y diseñador Web. Cofundador de Web & Media Integrated Solutions. Con más de 10 años de experiencia en la administración de sistemas GNU/Linux. Actualmente uno de los administradores de la Web del Grupo de Usuarios de Tecnologías Libres en Cuba.

Blog Comments powered by Disqus.

Entrada Anterior Siguiente Entrada