Administrando la prioridad de procesos en GNU/Linux

En GNU/Linux, la prioridad de proceso, 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 nuestro colega @Neji tiene corriendo un proceso con PID 785, y dicho proceso realiza una operación científica compleja, y mientras el proceso está trabajando @Neji desea jugar un juego (WoW, DOTA o lo que sea que se le antoje jugar en su GNU/Linux). En este ejemplo, como para @Neji lo principal ahora es jugar y no le apura la operación compleja del proceso mencionado, para que no se parta la PC de @Neji 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 @Neji 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 nuestra editora @linuXgirl haya estado alejada 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 ella confiesa le resulta incómoda. Imaginemos que nuestra amiga consigue sentarse en otro ordenador con GNU/Linux (supongamos sea Puppy Linux o Slitaz) y aprovecha para hacer una copia de un DVD físico de Ubuntu 14.04 (simple, crear un ISO). Desde la consola esto puede hacerlo tecleando lo siguiente:

dd if=/dev/cdrom of=~/ubuntu-14.04.1-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 @linuXgirl está haciendo traducciones o trabajando con documentos de miles de hojas en LibreOffice, un verdadero tragón de recursos. Ella 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-14.04.1-desktop-amd64.iso

… y nuestra amiga podrá seguir traduciendo y 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.

¿Te resultó interesante? Compártelo ...



Maikel Llamaret Heredia

Publicado por Maikel Llamaret Heredia

https://swlx.info » Facebook » Twitter » Google+ » Linkedin » Forma parte de GUTL desde el 6 diciembre, 2011. Parte de la familia GUTL. Usuario de Tecnologías Libres desde hace varios años. Fiel a GNU/Linux y las filosofías del Software Libre y el Código Abierto. Linux User # 587451. Creador y actual mantenedor del Proyecto SWL-X. Freelancer dedicado al Desarrollo / Diseño Web y Marketing Online. Creador de Web & Media Integrated Solutions

Este artículo tiene 2 comentarios

  1. Me vas a decir que soy el único en toda la comunidad de Linuxeros cubanos que se preocupa por compilar servers de WoW o jugar DOTA, DIABLO y esas cosas?? jaja no obstante… no conocia estas características

    • jaja, te agarré, no leías SWL-X, jejeje. Estoy pasando una lista de los mejores trucos de SWL-X para GUTL, obviamente antes del poweroff SWL-X hice un respaldo 😉
      En fin, hace unos años par de socios de Joven Club Santiago me llamaron para ver si compilaban un WoW o un motor de juego de esos de juegos sin sentido de esos que tanto ellos como tu u Ozkar juegan, si par de secuaces tuyos de aca de santiago que tu conoces, detras de eso estaba tambien alguien de Cienfuegos, creo que del municipio mas pequeño de Cuba.

Los comentarios están cerrados.