¿Comportamiento del programa cuando se recibe kill -HUP?

32

¿Hay alguna manera de averiguar qué hará el programa cuando reciba la señal de interrupción HUP?
Sin simplemente ejecutar el comando ofc: D

Por ejemplo,
killall -HUP pppdreiniciará pppd
killall -HUP firefoxsimplemente matará a Firefox

bbaja42
fuente

Respuestas:

47

Lee su documentación. Esa es la única manera. Como Keith ya escribió , el significado original de SIGHUP era que el usuario había perdido el acceso al programa, por lo que los programas interactivos deberían morir. Los demonios , programas que no interactúan directamente con el usuario, no necesitan este comportamiento y, en cambio, a menudo vuelven a cargar sus archivos de configuración cuando reciben SIGHUP. Pero estas son solo convenciones.

Si tiene la fuente, también puede leer eso. O si solo tiene el binario, puede intentar desarmarlo, buscar sigactionllamadas que configuren un controlador de señal SIGHUPe intentar averiguar qué están haciendo esos controladores de señal. Será más fácil organizar no enviar SIGHUP a ese programa en primer lugar.

En cualquier momento, un proceso dado se encuentra en uno de los tres estados con respecto a una señal particular: ignorarlo, realizar la acción predeterminada o ejecutar un controlador personalizado. Muchas unidades le permiten ver la máscara de señal de un proceso con ps, por ejemplo, con ps sLinux. Eso puede decirle si el proceso está ignorando la señal o morirá instantáneamente en SIGHUP, pero si el proceso ha establecido un controlador, no puede saber qué hace el controlador.

Gilles 'SO- deja de ser malvado'
fuente
1
SIGHUP se remonta a los días de los módems de acceso telefónico. Señaló un Hang-UP de la conexión del módem. Todavía se aplica a las conexiones caídas, pero en estos días rara vez es un bloqueo que hace que la conexión se caiga
P
@bill True, pero una sesión SSH también SIGHUP es su proceso hijo si pierde su conexión de cliente.
Keith
@Keith: Es por eso que indiqué que se aplica a las conexiones caídas, y que rara vez es causada por bloqueos. Sería confuso en este punto cambiar su nombre a algo relacionado con desconexiones, como SIGDCN.
BillThor
18

La acción predeterminada es finalizar el proceso en SIGHUP. Ver man 7 signalpara más detalles. Pero los programas pueden atraparlo y hacer lo que quieran. Como se supone que los procesos de daemon nunca deben salir, comúnmente usan SIGHUP para otros fines, como reinicializarse a sí mismos (como lo hace pppd). Firefox mantiene la acción predeterminada.

Keith
fuente