¿Qué son los PID de Unix y cómo funcionan?

Contenidos

Proceso creado en un sistema Linux.

Siempre que se crea un procedimiento en un sistema Linux, se le asigna un nuevo número que lo identifica frente a otras aplicaciones. Este es el ID de procedimiento, o PID, y se utiliza en todo el sistema para administrar los procesos en ejecución.

Cómo funcionan los procesos en Linux

El primer procedimiento que ejecuta Linux se llama systemd, que recibe PID 0. Todos los demás procesos se generan como hijos de systemd. Los primeros de forma general serán cosas de Linux de bajo nivel de las que no tendrá que preocuparse, pero más abajo en el árbol, el sistema comenzará a lanzar procesos a nivel de usuario como MySQL y Nginx.

Cada procedimiento además tiene un PPID, que almacena el PID del padre por el que fue creado el procedimiento. Además hay un TTY de procesos, que almacena el ID del terminal que usó para iniciar el procedimiento, y UID, que almacena el ID del usuario que lo creó. Cualquier procedimiento al que le falte un TTY de forma general se denomina demonio, una definición que se utiliza para denotar los procesos del sistema que se ejecutan en segundo plano y que no disponen una terminal de control.

Siempre que se cierra un procedimiento, ese PID está habilitada para que lo utilice otro procedimiento. Cada procedimiento además se cierra con un código de salida, que de forma general se utiliza para indicar si ocurrió o no un error. El código de salida 0 es una salida limpia, cualquier cosa mayor es un error específico.

En una nota más técnica, los PID son una parte importante de los espacios de nombres de Linux. Los espacios de nombres ocultan ciertas partes del sistema de los procesos que se ejecutan en diferentes espacios de nombres, lo que potencia las herramientas de contenedorización como Docker. Con los espacios de nombres, el árbol PID se corta en una rama determinada, y solo esa rama se entrega al procedimiento en contenedor. Esta rama se reinicia desde el PID 1, por lo que el contenedor ve como si se estuviera ejecutando en una instalación de Linux absolutamente nueva.

Procesos de visualización

Para obtener una lista completa de procesos, puede ejecutar el ps mando:

sudo ps -e

Lo que generará una lista muy larga de todos los procesos en ejecución, lo que ciertamente es un poco difícil de recorrer.

Una lista completa de procesos.

Puede filtrar los resultados canalizando la salida a grep, como ps no dispone de una función de búsqueda incorporada:

sudo ps -e | grep "processname"

Aún cuando se le debe advertir que, por extraño que parezca, esto además coincidirá con el recién creado grep procedimiento, como ps muestra argumentos de comando, que incluyen su cadena coincidente, que evidentemente coincide con sí mismo. Si solo necesita el PID de un nombre de procedimiento dado, el pgrep El comando simplemente devuelve el PID y nada más.

Un visor mucho más útil es el top comando, que actúa como un Administrador de tareas desde su terminal. Muestra todos los procesos ordenados por uso de CPU, así como algunas estadísticas generales del sistema:

El comando Top muestra todos los procesos ordenados por uso de CPU, así como algunas estadísticas generales del sistema.

Si está ejecutando un escritorio Linux, esto además muestra las aplicaciones que se están ejecutando en este momento, aún cuando la mayoría de las aplicaciones se realizarán en múltiples subprocesos, de ahí que Google Chrome complete esta lista que se ejecuta en múltiples procesos con diferentes PID.

Detener procesos

Siendo realistas, no hará mucho con el procedimiento real aparte de apagarlo, dado que no tendrá que administrar la creación del procedimiento. (Se maneja automáticamente cuando ejecuta un comando o secuencia de comandos). El comando para hacer eso se llama sucintamente kill, que toma un PID dado y cierra ese procedimiento:

sudo kill 40589

Además puede matar todos los procesos con un nombre de pila usando el killall mando. A modo de ejemplo, para liberar algo de RAM en su sistema, puede ejecutar:

sudo killall chrome

Evidentemente, esta no es la mejor manera de cerrar las aplicaciones de escritorio, pero la mayoría de los procesos no generarán mucho alboroto si se cierran de esta manera.

A pesar de esto, si el procedimiento es un servicio de Linux, querrá usar en su lugar el service comando para interactuar con él. A modo de ejemplo, recargando nginx:

service nginx reload

O apagarlo:

service nginx stop

Archivos PID

Un ID de procedimiento solo identifica de forma única un procedimiento mientras ese procedimiento esté en ejecución. Si tiene que reiniciar Nginx, es factible que se le asigne una nueva ID de procedimiento.

Aquí es donde entran en juego los archivos PID; son una forma de comunicación entre procesos, esencialmente un archivo que almacena el PID actual de un procedimiento dado. Otro procedimiento puede leer este archivo y saber inherentemente, a modo de ejemplo, cuál es el PID de MySQL. Cuando MySQL se inicia, escribe su propio PID en este archivo para que todo el sistema lo vea.

Por lo general, los archivos PID se almacenan en /var/run/, aún cuando esto es solo una práctica común y no es un requisito, de manera semejante a cómo se almacenan los archivos de registro en /var/log/.

La mayoría de los procesos con archivos PID además tendrán uno en ejecución al mismo tiempo, lo que se hace con la ayuda de los archivos de bloqueo. Los archivos de bloqueo son una forma de determinar una bandera que solo posibilita que se inicie un procedimiento al mismo tiempo. Cuando se inicia un procedimiento como Nginx, comprueba si el archivo de bloqueo existe y, si no es así, se iniciará con normalidad. Pero si ya está allí, Nginx arrojará un error y se negará a comenzar.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.