SUSPIRO

Señal Unix

En plataformas compatibles con POSIX, SIGHUP ("signal hang up " ) es una señal que se envía a un proceso cuando su terminal de control está cerrada. Originalmente , se diseñó para notificar al proceso una caída de la línea serial . SIGHUP es una constante simbólica definida en el archivo de encabezado . signal.h

Historia

Un bloqueo era a menudo el resultado de que un usuario conectado colgaba físicamente el módem.

Durante muchos años, el acceso a los sistemas informáticos consistía en conectar un terminal a un sistema mainframe mediante una línea serial y el protocolo RS-232 . Cuando se estaba desarrollando un sistema de interrupciones de software , llamadas señales, una de esas señales se designó para su uso en caso de interrupción.

SIGHUP se enviaba a los programas cuando se interrumpía la línea serial, a menudo porque el usuario conectado finalizaba la conexión colgando el módem . El sistema detectaba que la línea se interrumpía a través de la señal de detección de portadora de datos (DCD) perdida.

Las señales siempre han sido un método conveniente de comunicación entre procesos (IPC), pero en las primeras implementaciones no había señales definibles por el usuario (como las posteriores incorporaciones de SIGUSR1 y SIGUSR2 ) que los programas pudieran interceptar e interpretar para sus propios fines. Por esta razón, las aplicaciones que no requerían una terminal controladora, como los daemons , reutilizaban SIGHUP como una señal para volver a leer los archivos de configuración o reinicializar. Esta convención sobrevive hasta el día de hoy en paquetes como Apache y Sendmail .

Uso moderno

Con la disminución del acceso a través de la línea serial, el significado de SIGHUP ha cambiado un poco en los sistemas modernos, a menudo significando que se ha cerrado un pseudo terminal o un terminal virtual de control . Si se ejecuta un comando dentro de una ventana de terminal y la ventana de terminal se cierra mientras el proceso de comando aún se está ejecutando, recibe SIGHUP. [1]

Si el proceso que recibe SIGHUP es un shell de Unix , entonces, como parte del control del trabajo, a menudo interceptará la señal y se asegurará de que todos los procesos detenidos continúen antes de enviar la señal a los procesos secundarios (más precisamente, grupos de procesos , representados internamente por el shell como un "trabajo"), que por defecto los termina. [2]

Esto se puede evitar de dos maneras. En primer lugar, la Especificación Única de UNIX describe una utilidad de shell llamada nohup , que se puede utilizar como contenedor para iniciar un programa y hacer que ignore SIGHUP de forma predeterminada. En segundo lugar, los grupos de procesos secundarios se pueden "desheredar" invocando disown con el identificador de trabajo, que elimina el grupo de procesos de la tabla de trabajos del shell (para que no se les envíe SIGHUP) o (opcionalmente) los mantiene en la tabla de trabajos pero evita que reciban SIGHUP al finalizar el shell.

Los distintos shells también tienen otros métodos para controlar y gestionar SIGHUP, como la función disown de ksh . La documentación de la mayoría de las distribuciones de Linux modernas especifica el uso de kill -HUP <processID>para enviar la señal SIGHUP. [3]

Los programas Daemon a veces usan SIGHUP como señal para reiniciarse, siendo la razón más común para esto volver a leer un archivo de configuración que ha sido modificado.

Detalles

Se utilizan nombres de señales simbólicas porque los números de señales pueden variar entre plataformas, pero los sistemas compatibles con XSI permiten el uso de la constante numérica 1 para indicar un SIGHUP, que de hecho utiliza la gran mayoría de los sistemas.

Los SIGHUP se pueden manejar . Es decir, los programadores pueden definir la acción que desean que ocurra al recibir un SIGHUP, como llamar a una función , ignorarla o restablecer la acción predeterminada.

La acción predeterminada en los sistemas compatibles con POSIX es una terminación anormal.

Véase también

Referencias

  1. ^ Kerrisk, Michael, ed. (25 de julio de 2009), "SIGNAL(7)", Manual del programador de Linux (versión 3.22) , The Linux Kernel Archives , consultado el 23 de septiembre de 2009.
  2. ^ Garrels, Machtelt, ed. (27 de diciembre de 2008), "Signals", Guía Bash para principiantes, ver. 1.11 , Proyecto de documentación de Linux , consultado el 23 de septiembre de 2009.
  3. ^ Kerrisk, Michael, ed. (25 de julio de 2009), "KILL(2)", Manual del programador de Linux (versión 3.22) , The Linux Kernel Archives , consultado el 23 de septiembre de 2009.
Obtenido de "https://es.wikipedia.org/w/index.php?title=SIGHUP&oldid=1241051117"