- ¿Por qué un programa puede tener varios procesos?
- Procesos y subprocesos
- ¿Cómo sabe Linux qué procesos están activos?
- ¿Qué son las señales en Linux?
Cuando usamos Linux, todo lo que hacemos está relacionado con procesos. Cada vez que abres un programa, el sistema operativo crea uno o más procesos para hacerlo funcionar.
Por ejemplo:
- Abres VS Code → se crea un proceso.
- Ejecutas un script en Python → otro proceso.
- Escuchas música → otro proceso.
Gracias a que Linux permite ejecutar múltiples procesos a la vez, podemos hacer todo eso al mismo tiempo sin problema.
¿Por qué un programa puede tener varios procesos?
Veamos el ejemplo de un navegador como Chrome o Firefox:
Cada pestaña del navegador es un proceso separado.
Esto tiene muchas ventajas:
- Si una pestaña se bloquea, las otras siguen funcionando bien.
- El sistema operativo puede administrar mejor el uso de recursos.
Antes, si una pestaña fallaba, ¡todo el navegador se congelaba! 😬
Procesos y subprocesos
Un proceso también puede dividirse en subprocesos (threads). Esto se hace para que una tarea se ejecute más rápido o en paralelo, pero complica un poco el código.
¿Cómo sabe Linux qué procesos están activos?
Cada proceso tiene una estructura de datos interna, donde se guarda toda su información:
- PID (Process ID): identificador único del proceso
- Usuario que lo inició
- Ruta del archivo ejecutado
- Directorio de trabajo
- Entre otros
Puedes ver esta información con el comando:
ps aux
Ejemplo de salida:
root 1234 0.0 nginx: master process
juan 4567 0.2 python3 mi_script.py
Fíjate en la segunda columna: ahí está el PID de cada proceso.
¿Qué son las señales en Linux?
SIGTERM (solicitud de terminar)
Este le dice al proceso: "Por favor, termina tu trabajo y cierra". Se envía así:
kill -15 606827
Aunque el comando se llama kill, en realidad solo envía una señal, no "mata" directamente. El número 15 representa la señal SIGTERM, que significa: “termina si puedes”.
Un proceso en Python puede capturar señales y responder a ellas. Observa este ejemplo sencillo:
import signal
import sys
def manejar_salida(sig, frame):
print("Recibí SIGTERM. Cerrando el programa...")
sys.exit(0)
# Registramos la función para cuando llegue SIGTERM
signal.signal(signal.SIGTERM, manejar_salida)
print("Esperando señales...")
# Bucle infinito (como si fuera un servidor)
while True:
pass
Sigue estos pasos para probarlo:
- Guarda este script como
proceso.py - Ejecútalo: python3
proceso.py - En otra terminal, busca su PID con
ps aux | grep proceso.py - Envíale la señal:
kill -15 <PID>
Señal SIGKILL (terminación forzada)
Si el proceso no responde, puedes enviar SIGKILL:
kill -9 <PID>
Esto termina el proceso de inmediato, sin darle oportunidad de cerrar archivos o guardar información. Úsalo solo si no queda otra opción.
Resumen
- Un proceso es una instancia de un programa en ejecución.
- Linux puede manejar muchos procesos al mismo tiempo, lo que permite realizar varias tareas en paralelo.
- Cada proceso tiene un PID (identificador único) y otros datos como el usuario que lo ejecutó o el archivo que está corriendo.
- Puedes ver los procesos activos con el comando
ps aux. - Para interactuar con un proceso, puedes enviarle señales.
SIGTERM(señal 15) pide al proceso que se cierre de forma ordenada.SIGKILL(señal 9) lo fuerza a cerrarse inmediatamente, sin posibilidad de reacción.- En Python, puedes capturar señales como
SIGTERMy ejecutar una función antes de salir.
Trabajo independiente
Vamos a practicar cómo encontrar un proceso que ya ha sido iniciado.
1️⃣ Inicia el servidor web en segundo plano:
python3 -m http.server 8000 --bind 127.0.0.1 --directory /var/www/public_html > /dev/null &
2️⃣ Muestra la lista de procesos, encuentra el proceso del servidor web y finalízalo.
3️⃣ Verifica que la página ya no se pueda abrir en el navegador.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.