Señal (IPC)


Las señales son mensajes estandarizados que se envían a un programa en ejecución para desencadenar un comportamiento específico, como salir o manejar errores. Son una forma limitada de comunicación entre procesos (IPC), que se utiliza normalmente en Unix , similar a Unix y otros sistemas operativos compatibles con POSIX .

Una señal es una notificación asincrónica enviada a un proceso o un hilo específico dentro del mismo proceso para notificarle de un evento. Los usos comunes de las señales son interrumpir, suspender, terminar o matar un proceso. Las señales se originaron en Bell Labs Unix de la década de 1970 y luego se especificaron en el estándar POSIX .

Cuando se envía una señal, el sistema operativo interrumpe el flujo normal de ejecución del proceso de destino para entregar la señal. La ejecución se puede interrumpir durante cualquier instrucción no atómica . Si el proceso ha registrado previamente un manejador de señales , esa rutina se ejecuta. De lo contrario, se ejecuta el manejador de señales predeterminado.

Los programas integrados pueden encontrar señales útiles para las comunicaciones entre procesos, ya que las señales se destacan por su eficiencia algorítmica .

Las señales son similares a las interrupciones , con la diferencia de que las interrupciones son mediadas por la CPU y manejadas por el kernel, mientras que las señales son mediadas por el kernel (posiblemente a través de llamadas al sistema) y manejadas por procesos individuales . El kernel puede pasar una interrupción como señal al proceso que la causó (los ejemplos típicos son SIGSEGV , SIGBUS , SIGILL y SIGFPE ).

La versión 1 de Unix tenía llamadas al sistema separadas para detectar interrupciones, cierres y trampas de máquinas. La versión 4 combinó todas las trampas en una llamada, señal y cada trampa numerada recibió un nombre simbólico en la versión 7 . kill apareció en la Versión 2 , y en la Versión 5 podía enviar señales arbitrarias. [1] El Plan 9 de Bell Labs reemplazó las señales con notas , que permiten enviar cadenas cortas y arbitrarias. [ cita requerida ]