Saltar al contenido

Procesos de Linux – Parte 1

Cada programa que se ejecuta en un sistema Linux se gestiona como un proceso. Como tal, se inicia, se ejecuta y eventualmente termina o continúa corriendo en el fondo. En este último caso, se le suele llamar demonio o servicio de sistema .

Este ciclo es gestionado automáticamente por el núcleo, sin necesidad de intervención del usuario en circunstancias normales. Sin embargo, un proceso puede requerir una acción por nuestra parte si no se está comportando como se esperaba, si necesita ser reiniciado después de que se hayan hecho cambios en su configuración, o cuando necesitemos modificar los recursos del sistema que se le han asignado antes o durante su ejecución.

Procesos de Linux – Parte 1
Procesos de Linux – Parte 1

En esta sección vamos a introducir los siguientes comandos de gestión de procesos:

  • p.d.: informe de una instantánea de los procesos actuales
  • pstree: mostrar un árbol de procesos
  • arriba: procesos de visualización e información sobre el tiempo de funcionamiento
  • bueno: ejecutar un programa con prioridad de programación modificada
  • renice: alterar la prioridad de los procesos en ejecución
  • matar: terminar procesos
  • tiempo de funcionamiento: cuánto tiempo ha estado funcionando el sistema

Introducción de procesos en Linux

Cuando se inicia un proceso, ya sea manualmente o durante el proceso de arranque, se le asigna un número entero único como identificador llamado Process ID o PID para abreviar. Si un proceso A lanza o inicia un proceso B , se dice que A es el padre de B , o que B es el hijo de A . En este escenario, la PID de A es la PID (o PPID) del padre de B .

El primer proceso iniciado por el núcleo en el momento del arranque (PID=1) se llama systemd en las distribuciones modernas de Linux. Este proceso es el responsable de iniciar varios otros procesos, que a su vez inician más, hasta que el sistema operativo es completamente funcional.

Además, cada proceso está asociado con el usuario que lo inició. Este usuario puede ser una persona real o una cuenta utilizada por el sistema para su funcionamiento. Lo que discutimos en la guía de permisos de Linux también se aplica aquí: un proceso sólo tiene acceso a los recursos del sistema que su cuenta de usuario asociada puede utilizar. En otras palabras, si un proceso A fue iniciado por user1 , y dicha cuenta no tiene permisos de escritura en un archivo dado, el proceso tampoco podrá escribir en ese archivo.

Para mostrar una instantánea de todos los procesos que se están ejecutando actualmente en nuestro sistema, usaremos ps. Cuando se ejecuta sin argumentos, este comando devolverá sólo los procesos propiedad del usuario actual. Se puede obtener más información útil utilizando las opciones aux o -ef. Dado que la salida en ambos casos puede ser muy larga, podemos canalizar la salida a un paginador como less para inspeccionarla más fácilmente:

1ps aux |less

bash

o

1ps -ef |less

bash

Los comandos anteriores devuelven más información de la que normalmente nos interesa. Lo más frecuente es que queramos ver el PPID, el PID, el comando asociado al proceso (o la ruta absoluta al archivo ejecutable), y el porcentaje de memoria del sistema y el uso de la CPU. Cada uno de estos campos (y otros también) se explican en detalle en la sección ESPECIFICADORES DE FORMATO ESTÁNDAR en man ps.

Para ver sólo estos campos en la salida de ps, usaremos la opción -eo combinada seguida de los correspondientes especificadores de formato. Por ejemplo,

1ps -eo ppid,pid,cmd,%mem,%cpu |less

bash

Durante una inspección regular o la resolución de problemas del sistema, es útil identificar qué procesos consumen más memoria. Afortunadamente, ps apoya la opción –sort. Cuando se utiliza con el comando anterior, y se le pone en la cabeza en lugar de menos, podemos obtener fácilmente una lista de los procesos que más memoria consumen de la siguiente manera:

1ps -eo ppid,pid,cmd,%mem,%cpu --sort -%mem |head -n 5

bash

Entre otras cosas, la imagen de arriba muestra que el PID de snapd es 940. Este proceso fue iniciado por systemd , como podemos ver por PPID=1, y es actualmente el proceso que está consumiendo más memoria.

El signo menos en -%mem después de –sort indica que la salida debe ser clasificada en forma descendente. Usar un signo más (+) en su lugar, hará que la salida se ordene en forma ascendente, que es el comportamiento por defecto.