Administración de Procesos

Se conocen como procesos a las instancias de un programa que se encuentra en ejecución.

Cada uno de los procesos es identificado de forma única con un número que conocemos como PID. Algunos ejemplos de procesos que se ejecutan en el sistema pueden ser el entorno gráfico (que puede estar constituido por otros más de un proceso), el shell, etc…

A continuación, veremos algunos de los comando para trabajar con los procesos.

 

PS y PSTREE

Este es un comando que nos permite mostrar información acerca del estado de los procesos.

ps aux

USER –> Usuario Propietario del proceso.

PID –> Número único que identifica al proceso.

CPU –> Porcentaje de cpu utilizado por el proceso.

MEM  –> Porcentaje de memoria utilizado por el proceso.

VSZ –> Tamaño de memoria virtual asignado al proceso(en Kb).

RSS –> Resident Set Size. Memoria actual que está usando el proceso.

TTY –> Terminal asociada al proceso. Símbolo ? si no hay.

STAT –> Estado del proceso. Puede tener los siguientes:

R en ejecución.

S ejecutado pero sin actividad.

T detenido.

Z zombie que no se finalizó de forma correcta.

D uninterrupible sleep, generalmente asociados con el sistema.

X muerto, proceso finalizado que sigue apareciendo.

START –> Hora de inicio.

TIME –> Tiempo ejecutándose.

COMMAND –> Nombre del proceso/comando.

 

Con el siguiente comando podemos ver la documentación de ps:

man ps

 

Algunos de los parámetros:

       l    formato largo
       u    formato usuario: muestra el usuario y la hora de inicio
       j    formato trabajo (jobs): pgid sid
       s    formato señal (signal)
       v    formato vm
       m    muestra información de memoria (combínese con p para obtener el número de páginas).
       f    formato "forest" ("bosque") de familias en forma de árbol
       a    muestra también los procesos de otros usuarios
       x    muestra procesos que no están controlados por ninguna terminal
       S    añade tiempo de CPU y fallos de página de los hijos
       c    nombre del comando obtenido de task_struct
       e    muestra ambiente (environment) después del nombre del comando y ` + '
       w    Salida ancha (wide): no se truncan las líneas de  comando  para  que  quepan  en  una
            línea.  Para  ser  exactos,  cada  w que se especifica añadirá una posible línea a la
            salida. Si el espacio no se necesita, no se usa. Puede usar hasta 100 w's.
       h    sin cabecera (header)
       r    sólo procesos que se están ejecutando
       n    salida numérica para USER y WCHAN.

 

 

Mostrar los procesos en forma de árbol:
pstree

 

KILL y KILLALL

El comando kill sirve para enviar señales a los procesos, y si no añadimos ninguna opción adicional a este comando sirve para matar procesos.

La sintaxis de este comando es:

kill 1041

*El número sería el PID del proceso.

 

Para ver una lista de todas las señales que le podemos enviar a un proceso ejecutamos el siguiente comando:

kill -l

Como podemos ver en la captura del resultado del comando, cada una de estas señales viene acompañada de un número que tendremos que utilizar en el comando para que nos quede algo así:

kill -9 1296

*Este comando mata(SIGKILL) el proceso con el PID 1296.

Las señales más comunes con este comando son:

  • kill -9 –> Para matar o terminar un proceso.
  • kill -1 –> Obliga al proceso a releer sus archivos de configuración mientras está en ejecución.
  • kill -19 –> Detiene momentáneamente un proceso.
  • kill -18 –> Continua la ejecución de un proceso.

 

También tenemos el comando killall que funciona de forma similar pero que en este se indica el nombre del programa en lugar del PID. Esto nos servirá para eliminar todos los procesos que se estén ejecutando con el mismo nombre.

 

NICE y RENICE

Nice permite cambiar la prioridad de un proceso y así hacer que un proceso tenga la prioridad más alta o baja según nuestras necesidades.

Por defecto los procesos tienen una prioridad en la CPU igual a 0 que es la más alta. Estas prioridades van desde el número 0 al 19 siendo esta última la más baja.

Podemos ver las prioridades actuales gracias al comando ps que vimos anteriormente:

ps -l

Este nos mostrará en la columna NI la prioridad actual.

 

Podemos probar este comando de la siguiente forma. Ejecutamos el comando yes con prioridad 19:

nice -n -5 yes proba

Este comando nos mostrará en pantalla el texto proba en bucle.

Abrimos otra terminal y ejecutamos el comando ps -el y nos fijamos que el comando yes en la columna NI tiene 19 como valor.

 

Renice es un comando similar, pero que nos permite establecer la prioridad en tiempo real sin la necesidad de detener el proceso.

Su sintaxis es la siguiente:

renice 19 2716

En este ejemplo cambiamos a prioridad 19 el proceso con PID 2716.

 

TOP

Como hemos visto, muchos de los comando anteriores nos mostraban en pantalla información acerca de los procesos, pero no en tiempo real.

El comando top actualiza cada 3 segundos la información y nos la muestra.

top

Una vez tenemos ejecutado este comando, podemos pulsar la tecla h para ver comandos adicionales.

Uno de ellos se activa al pulsar la letra S que permite establecer la frecuencia en segundos en la que se nos refrescará la información en pantalla.

Además de top, también podemos instalar htop que es una herramienta muy similar pero con más funcionalidades y ayudas en forma de color.

Podemos instalarla con:

apt install htop

 

Y ejecutar la herramienta con:

htop

 

NOHUP y &

Cuando deseamos ejecutar un proceso en segundo plano podemos añadir el símbolo &. Ejemplo:

sleep 2000 &

Con este ejemplo se ejecutará el comando sleep en segundo plano.

En el caso de ejecutar un comando de forma normal y decidir que era mejor haberlo ejecutado en segundo plano, podemos solucionarlo haciendo CTRL + Z para detenerlo. A continuación usaríamos el comando jobs para ver el número asociado a este proceso y ejecutar el siguiente comando para que se siga ejecutando en segundo plano:

bg 1

Cuando cerramos sesión en un terminal, todos los procesos que esté ejecutando ese usuario se muere, para solucionar esto, tenemos el comando Nohup.