Señales para matar un proceso

En sistemas GNU/Linux es posible enviar señales a los procesos para finalizar su ejecución, normalmente usando el comando kill:

$ kill -9 id_proceso         # SIGKILL
$ kill -s TERM id_proceso    # SIGTERM. Igual que kill -15 id_proceso

Aunque el comportamiento predeterminado para SIGKILL, también para SIGHUP, SIGINT, SIGQUIT y SIGTERM, es finalizar el proceso, las aplicaciones pueden interpretarlas de diferente manera. Es una cuestión de convención, que cada aplicación puede seguir o no, y no del diseño del sistema:

  • SIGHUP (1)

    Se envía automáticamente a los procesos que se ejecutan en un terminal cuando el usuario se desconecta del mismo. HUP se refiere a Hang UP (colgar) porque el usuario colgaba el módem de su línea telefónica para desconectarse del terminal.

    Las aplicaciones que reciban SIGHUP pueden intentar guardar su estado antes de finalizar su ejecución.

    SIGHUP también se usa en aplicaciones no interactivas (demonios) para que recarguen su configuración sin detener el proceso.

  • SIGINT (2)

    El proceso que reciba SIGINT (INTerrupt) normalmente interpretará «detén lo que estés haciendo ahora mismo y espera más información del usuario».

    Es la señal enviada por CTRL+C al proceso en curso en un terminal.

    Las aplicaciones no interactivas generalmente interpretan esta señal como SIGTERM.

  • SIGQUIT (3)

    Se debería usar cuando una aplicación no está funcionando adecuadamente y necesita ser finalizada en el momento. Tradicionalmente volcaban el núcleo en un archivo (aunque los sistemas modernos donde la mayoría de los usuarios no sabrían qué es un archivo de núcleo tienden a no producirlos de forma predeterminada).

    Las aplicaciones pueden implementar alguna reacción a la señal, pero deberían hacer muy poco (en particular, no guardar ningún estado) porque la intención de SIGQUIT es usarse cuando algo está muy mal.

  • SIGKILL (9)

    Siempre cumple su misión, terminar el proceso y listo. Al contrario que las demás señales, no proporciona ninguna oportunidad a las aplicaciones para reaccionar.

  • SIGTERM (15)

    Indica al proceso que finalice limpiamente. Y podría tardar un tiempo en guardar su estado, liberar recursos como archivos temporales, evitar dejar archivos corruptos, etc.

    Una aplicación que no deba ser interrumpida durante una ejecución crítica puede ignorar SIGTERM por un tiempo.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *