Señales
100%

Procesos · Lección 6

Señales

Aprende cómo Linux genera, bloquea, entrega y trata señales para controlar procesos y notificar eventos.

Una señal es una notificación asíncrona entregada a un proceso o a un hilo concreto. Las señales comunican eventos y solicitan acciones, pero transportan información limitada frente a mecanismos de comunicación entre procesos orientados a datos.

Origen de las señales

Las señales pueden proceder de varios lugares:

  • Una terminal puede generar SIGINT para Ctrl-C o SIGTSTP para Ctrl-Z y dirigirla al grupo de procesos en primer plano.
  • El kernel puede generar una señal síncrona como SIGSEGV cuando un hilo realiza una referencia de memoria no válida.
  • Un proceso puede enviar una señal autorizada a otro proceso o grupo de procesos.
  • Los temporizadores, los cambios de estado de hijos y las desconexiones de terminal pueden generar otras señales.

El emisor debe tener los permisos apropiados, normalmente basados en credenciales o capacidades. Por tanto, las señales son una interfaz de control mediada por el kernel, no mensajes sin restricciones entre usuarios arbitrarios.

¿Qué señal genera normalmente una terminal para Ctrl-C?

Disposiciones y acciones predeterminadas

La mayoría de las señales tienen una disposición para todo el proceso que selecciona una de tres respuestas:

  • realizar la acción predeterminada definida para la señal;
  • ignorar la señal;
  • invocar un manejador instalado por el usuario.

Las acciones predeterminadas varían: una señal puede terminar, terminar y crear un volcado de memoria, detener, continuar o ignorarse. Capturar SIGTERM puede permitir que un programa inicie un cierre ordenado, pero el manejador debe seguir reglas estrictas de seguridad asíncrona y el programa aún puede retrasar o rechazar la salida.

Los nombres de las señales son más portables y legibles que los números. Aunque arquitecturas habituales de Linux usan el 15 para SIGTERM, no supongas que todos los números, salvo los garantizados por la norma correspondiente, son idénticos en todas partes. Usa kill -l para consultar la correspondencia local.

¿Por qué puede un proceso responder de forma ordenada a SIGTERM?

Señales bloqueadas y pendientes

Los hilos tienen máscaras de señales que pueden bloquear temporalmente la entrega de determinadas señales. Una señal generada y bloqueada permanece pendiente hasta que pueda entregarse, según las reglas de las señales estándar y en tiempo real. Las señales estándar del mismo tipo pueden fusionarse en vez de ponerse en cola una vez por aparición.

En un proceso multihilo, una señal dirigida al proceso puede entregarse a un hilo apto que no la bloquee; una señal dirigida a un hilo apunta al hilo especificado. Por tanto, un diseño correcto requiere más que comprobar si «el proceso la bloqueó».

¿Qué ocurre normalmente cuando se genera una señal bloqueable mientras su destino la bloquea?

Señales que no pueden tratarse

SIGKILL termina un proceso y SIGSTOP lo detiene. Ninguna puede capturarse, ignorarse ni bloquearse. Esto garantiza que el kernel conserve el control final, pero también significa que SIGKILL no ofrece ninguna oportunidad para la limpieza de la aplicación.

Incluso SIGKILL puede no hacer que una tarea desaparezca inmediatamente desde la perspectiva de un observador. Una tarea puede estar esperando en una operación del kernel no interrumpible y, después de terminar, su padre todavía debe recoger su estado.

¿Qué pareja no puede capturarse, ignorarse ni bloquearse?

Lección completada

Has completado Señales

Ahora puedes explicar las principales etapas y restricciones del tratamiento de señales en Linux.

  • Identifica señales generadas por terminales, el kernel y otros procesos.

  • Distingue acciones predeterminadas, señales ignoradas y manejadores.

  • Relaciona el bloqueo con la entrega pendiente y las máscaras de hilos.

  • Recuerda que SIGKILL y SIGSTOP no pueden tratarse ni bloquearse.

Guarda tu progreso

Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.

Crear una cuenta gratuita
Siguiente Lección
Volver a Procesos