Bloque II · Módulo 2 · Unidad 2.2
Procesos, señales, planificación y jobs
Un modelo para relacionar programa, proceso, hilo, parentesco, estados, señales, prioridad y control de trabajos sin confundirlos con servicios.
Antes de empezar#
Ejecutar un programa crea una entidad con contexto: un proceso. Observar un PID solo no basta para saber qué trabajo hace, quién lo creó, qué hijos tiene, si espera, si terminó o si un supervisor lo volverá a crear.
Dependencias. El mapa de proceso/servicio de 1.1, códigos de salida y shell de 1.2, método diagnóstico de 1.3 y descriptores de 2.1.
Alcance. Programa, proceso, hilo, PID/PPID, grupos, sesiones, estados,
foreground/background, señales, exit status, zombies, prioridad nice,
planificación conceptual, límites y /proc.
Fuera de alcance. Programar fork, exec o handlers; diseñar un scheduler;
políticas de tiempo real; cgroups y gestores de servicios en profundidad.
1. Programa, proceso e hilo#
Un programa es código y datos almacenados. Un proceso es una ejecución con:
- espacio de direcciones y memoria;
- credenciales;
- descriptores;
- PID y relaciones;
- uno o más hilos;
- estado y contabilidad de recursos.
exec sustituye el programa que ejecuta un proceso sin cambiar necesariamente
su PID. Por eso PID y nombre de ejecutable no son una identidad suficiente para
autorizar una acción: el PID puede permanecer durante exec y reutilizarse
después de una salida.
Un hilo es una unidad de ejecución dentro de un proceso. Los hilos POSIX comparten dirección y recursos del proceso, aunque el kernel planifica tareas individuales y expone identificadores. Una herramienta puede agregar por proceso o mostrar hilos: hay que leer su contrato.
| Entidad | Qué representa | Pregunta útil |
|---|---|---|
| Programa | Código almacenado. | ¿Qué binario o script se cargará? |
| Proceso | Instancia con contexto y recursos. | ¿Qué ejecuta este PID ahora? |
| Hilo | Flujo planificable dentro del proceso. | ¿Cuántas tareas participan? |
| Job | Unidad de control de una shell. | ¿Qué pipeline controla esta shell? |
| Servicio | Capacidad operativa gestionada. | ¿Está disponible la operación? |
2. Identidad, parentesco y grupos#
Cada proceso tiene PID y conoce el PID del padre. El parentesco permite razonar sobre creación, herencia y recolección, pero no implica que el padre controle siempre toda la vida del hijo.
Los grupos de procesos permiten actuar sobre un pipeline como unidad. Una sesión agrupa procesos y puede tener una terminal de control. El grupo de foreground recibe ciertas señales generadas por la terminal.
sesión 200, terminal pts/2
├─ grupo 200, foreground: bash PID 200
└─ grupo 240, job:
├─ producer PID 240
├─ transform PID 241
└─ writer PID 242
pstree destaca parentesco. ps -o pid,ppid,pgid,sid,tty,state,cmd permite
comparar varias identidades. Ninguna salida aislada prueba que un proceso
pertenezca al intento correcto: añade tiempo de inicio, argumentos, cgroup,
namespace o etiqueta según el entorno.
3. Estados y transiciones#
Los estados de Linux describen qué hace una tarea en el instante observado:
R: ejecutándose o preparada para ejecutar;S: espera interrumpible;D: espera no interrumpible, frecuente alrededor de I/O;T: detenida o trazada;Z: terminada, pendiente de recolección.
Otros caracteres y modificadores dependen de la herramienta y versión. Descubre
su leyenda con ps --help o man ps.
creada → preparada/ejecutando ↔ espera
│ │
├─ stop → detenida ─ cont ─┘
└─ salida → zombie → recolección
4. Foreground, background y jobs#
Foreground y background son relaciones con una shell y su terminal, no sinónimos de «visible» y «servicio». Bash asigna jobs a pipelines y usa grupos de procesos para entregar o recuperar el control de la terminal.
jobsmuestra trabajos conocidos por esa shell;Ctrl+Zsuele provocar una señal de parada al grupo de foreground;bgcontinúa un job sin entregarle foreground;fglo continúa y le entrega la terminal;&inicia una lista de forma asíncrona desde la shell.
Cerrar la terminal puede producir SIGHUP según shell, job, sesión y
configuración. nohup, disown o un supervisor modifican aspectos diferentes;
no convierten automáticamente un programa en un servicio bien operado.
5. Señales#
Una señal notifica un evento a un proceso o hilo. kill es una interfaz para
enviar señales; el nombre no significa que toda señal mate.
El proceso puede:
- aceptar la disposición predeterminada;
- ignorar algunas señales;
- instalar un handler;
- bloquear temporalmente su entrega;
- tener señales pendientes.
SIGKILL y SIGSTOP no pueden capturarse, bloquearse ni ignorarse. Esto los
hace contundentes, no apropiados como primer paso. SIGKILL no permite cleanup
del proceso y puede dejar trabajo parcial que otros componentes deban reparar.
| Señal | Intención frecuente | Qué verificar |
|---|---|---|
SIGTERM | Solicitar terminación ordenada. | Handler, drenaje, salida, hijos y operación. |
SIGINT | Interrupción interactiva. | Disposición del programa; no asumir equivalencia con TERM. |
SIGSTOP/SIGCONT | Detener o continuar. | Estado y efecto sobre timeouts/dependencias. |
SIGHUP | Terminal cerrada o convención de recarga. | Contrato específico del programa. |
SIGKILL | Terminación forzada del objetivo. | Identidad, hijos, supervisor, datos y recuperación. |
6. Salida, zombies y recolección#
Al terminar, un proceso produce estado de salida. El kernel conserva una entrada mínima hasta que el padre la recoge mediante una operación de espera. Esa entrada es un zombie: ya no ejecuta código ni conserva su memoria ordinaria.
Un zombie persistente señala que el padre no está recolectando adecuadamente. Enviar otra señal al zombie no hace que ejecute cleanup; hay que entender el padre y su ciclo.
El código de salida observado por una shell puede representar salida normal o terminación por señal según su convención. En un pipeline, recuerda la Unidad 1.2: el estado del pipeline no siempre expone todos los fallos sin configuración o captura explícita.
7. Planificación y prioridad#
El scheduler elige tareas ejecutables. Para cargas ordinarias, el valor nice
influye en la prioridad relativa dentro de la política normal. Un valor más alto
cede preferencia; no reserva una cuota ni garantiza latencia.
nice inicia con un ajuste; renice modifica procesos existentes sujeto a
permisos. Interpreta junto con:
- número de CPU disponibles;
- tareas ejecutables;
- afinidad y límites;
- política de planificación;
- cgroups o cuotas;
- espera de I/O;
- ventana temporal.
Las políticas de tiempo real y deadlines pueden bloquear trabajo ordinario si se usan mal. Quedan fuera del bloque; no las cambies para «hacer más rápido» un laboratorio inicial.
8. /proc y observación#
/proc expone vistas del estado del kernel. Para un PID:
status: estado legible, PPID, UIDs/GIDs, hilos, memoria y máscaras de señales;stat: campos compactos para herramientas;cmdline: argumentos, si son visibles;fd: descriptores;limits: límites de recursos;cgroup: pertenencia de control;task: hilos/tareas.
| Pregunta | Vista | No demuestra |
|---|---|---|
| ¿Existe y desde cuándo? | ps, start time, /proc/PID/stat. | Que sea el proceso esperado sin más identidad. |
| ¿Quién lo creó? | PPID y árbol. | Que el padre aún gestione su salud. |
| ¿Qué espera? | state, wchan, stack cuando sea seguro. | Causa final a partir de una instantánea. |
| ¿Qué señal puede recibir? | permisos, máscaras y contrato. | Que el handler completará a tiempo. |
9. Demostración razonada#
Supón que un worker no desaparece cinco segundos después de una solicitud:
estado: D
PPID: supervisor
hijo: Z
grace period: 20 s
No concluyas «TERM está roto». El estado D sugiere espera no interrumpible;
el hijo zombie requiere recolección del padre; y todavía no venció el periodo.
La siguiente observación debería aclarar operación bloqueada, disposición de
señales y contrato del supervisor.
Si se fuerza al worker, el supervisor puede recrearlo y repetir el problema. Verifica árbol, servicio y síntoma original, no solo ausencia del PID anterior.
10. Errores conceptuales frecuentes#
11. Síntesis y dominio#
Un proceso es ejecución con contexto; los hilos son tareas relacionadas; el parentesco explica creación, los grupos permiten control y los jobs pertenecen a una shell. Estados y señales son un protocolo observable, no botones universales.
Has alcanzado el dominio cuando puedes:
- dibujar PID, PPID, PGID, SID y terminal de un pipeline;
- interpretar R/S/D/T/Z sin convertir estado en causa;
- explicar foreground, background y job desde la shell;
- elegir señal, espera y escalado proporcionados;
- validar identidad y observar
/procreconociendo carreras y namespaces.
Prácticas relacionadas#
SYS-R-202: dibujar parentesco y estados.SYS-L-202: observar jobs, señales y /proc.SYS-I-202: investigar un worker que no termina.
12. Fuentes#
- Linux kernel — /proc filesystem
Estados, parentesco, hilos, señales y contabilidad expuestos por proceso.
- Linux man-pages — signal(7)
Disposición, máscara, señales pendientes y entrega.
- Linux man-pages — sched(7)
Políticas y prioridad de planificación.
- GNU Bash — Job Control
Jobs, grupos, sesiones y terminal de control.