Diferencia entre la señal de muerte menos violenta -HUP (1) -INT (2) y -TERM (15)

32

Aparte de los más violentos kill -9(SIGKILL), no entiendo la diferencia entre las otras 3 señales comunes ( aquí ) -HUP(1), -INT(2) y -TERM(15).

¿En qué escenarios funcionaría uno y el otro no?

En general, ¿cuándo falla -9( -KILL)?

Para mí, parecen pedir que el proceso finalice con gracia , sin guardar . Calificando la dureza, diría yo -HUP < -TERM < -INT < -KILL.

Kenny
fuente
HUPno necesariamente significa que el programa se cerrará. Algunos programas usan SIGHUPpara recargar archivos de configuración. SIGKILLfalla, o más bien se pospone, cuando el proceso está en suspensión ininterrumpida .
muru

Respuestas:

52

SIGKILL nunca deja de matar un proceso en ejecución, ese es el punto. Existen otras señales para dar a la aplicación la oportunidad de reaccionar.

El comportamiento predeterminado de SIGINT, SIGTERM, SIGQUIT y SIGHUP es matar el programa. Sin embargo, las aplicaciones pueden instalar un controlador para estas señales. Por lo tanto, el comportamiento real de las aplicaciones cuando reciben estas señales es una cuestión de convención (que cada aplicación puede seguir o no), no del diseño del sistema.

SIGINT es el "más débil" del lote. Su significado convencional es "deja de hacer lo que estás haciendo ahora y espera más información del usuario". Es la señal generada por Ctrl+ Cen un terminal. Los programas no interactivos generalmente lo tratan como SIGTERM.

SIGTERM es la señal de muerte "normal". Le dice a la aplicación que salga limpiamente. La aplicación puede tomar tiempo para guardar su estado, liberar recursos como archivos temporales que de otro modo se quedarían atrás, etc. Una aplicación que no quiere ser interrumpida durante una aplicación crítica puede ignorar SIGTERM por un tiempo.

SIGHUP es casi lo mismo que SIGTERM en términos de dureza, pero tiene un papel específico porque se envía automáticamente a las aplicaciones que se ejecutan en un terminal cuando el usuario se desconecta de ese terminal (etimológicamente, porque el usuario se estaba conectando a través de una línea telefónica y el módem colgar). SIGHUP es a menudo involuntario, a diferencia de SIGTERM, que debe enviarse explícitamente, por lo que las aplicaciones deben intentar guardar su estado en un SIGHUP. SIGHUP también tiene un significado convencional completamente diferente para las aplicaciones no orientadas al usuario ( daemons ), que es volver a cargar su archivo de configuración.

SIGQUIT es la más severa de las señales ignorables. Está destinado a usarse cuando una aplicación se está comportando mal y necesita ser eliminada ahora, y por defecto tradicionalmente dejaba un archivo de volcado de núcleo (los sistemas modernos donde la mayoría de los usuarios no sabrían qué es un archivo de núcleo tienden a no producirlos por defecto) . Las aplicaciones pueden establecer un controlador, pero deberían hacer muy poco (en particular, no guardar ningún estado) porque la intención de SIGQUIT debe usarse cuando algo está muy mal.

Gilles 'SO- deja de ser malvado'
fuente
¿Puedes dar más detalles sobre "salvar su estado"? Si estoy en un editor de texto y lo mato, supongo que el contenido no se guarda.
Kenny
2
@Kenny La mayoría de los editores no guardarán el archivo, porque es posible que haya realizado modificaciones temporales que no tenía la intención de guardar. Los editores avanzados (por ejemplo, vi, emacs) tienen un archivo de guardado automático donde guardan datos de vez en cuando; en SIGHUP, generalmente se aseguran de que el archivo de guardado automático esté actualizado.
Gilles 'SO- deja de ser malvado'