En los sistemas POSIX, las señales de terminación suelen tener el siguiente orden (según muchas páginas MAN y las especificaciones POSIX):
SIGTERM: solicite cortésmente que finalice el proceso. Terminará elegantemente, limpiando todos los recursos (archivos, sockets, procesos secundarios, etc.), eliminando archivos temporales, etc.
SIGQUIT - solicitud más contundente. Terminará sin gracia, aún limpiando recursos que absolutamente necesitan limpieza, pero tal vez no elimine archivos temporales, tal vez escriba información de depuración en alguna parte; en algunos sistemas también se escribirá un volcado del núcleo (independientemente de si la aplicación capta la señal o no).
SIGKILL - petición más contundente. Ni siquiera se le pide al proceso que haga nada, pero el sistema limpiará el proceso, le guste o no. Lo más probable es que se escriba un volcado de memoria.
¿Cómo encaja SIGINT en esa imagen? Un proceso CLI generalmente es terminado por SIGINT cuando el usuario presiona CRTL + C, sin embargo, un proceso en segundo plano también puede ser terminado por SIGINT usando la utilidad KILL. Lo que no puedo ver en las especificaciones o los archivos de encabezado es si SIGINT es más o menos contundente que SIGTERM o si existe alguna diferencia entre SIGINT y SIGTERM.
ACTUALIZAR:
La mejor descripción de las señales de terminación que encontré hasta ahora está en la documentación GNU LibC . Explica muy bien que existe una diferencia intencionada entre SIGTERM y SIGQUIT.
Dice sobre SIGTERM:
Es la forma normal de pedir cortésmente a un programa que termine.
Y dice sobre SIGQUIT:
[...] y produce un volcado del núcleo cuando finaliza el proceso, al igual que una señal de error de programa. Puede pensar en esto como una condición de error de programa "detectada" por el usuario. [...] Es mejor omitir ciertos tipos de limpieza al manejar SIGQUIT. Por ejemplo, si el programa crea archivos temporales, debería manejar las otras solicitudes de terminación borrando los archivos temporales. Pero es mejor que SIGQUIT no los elimine, para que el usuario pueda examinarlos junto con el volcado de memoria.
Y SIGHUP también se explica bastante bien. SIGHUP no es realmente una señal de terminación, solo significa que la "conexión" con el usuario se ha perdido, por lo que la aplicación no puede esperar que el usuario lea más salida (por ejemplo, salida stdout / stderr) y no hay entrada que esperar del usuario por más tiempo. Para la mayoría de las aplicaciones, eso significa que es mejor que salgan. En teoría, una aplicación también podría decidir que entra en modo demonio cuando se recibe un SIGHUP y ahora se ejecuta como un proceso en segundo plano, escribiendo la salida en un archivo de registro configurado. Para la mayoría de los demonios que ya se ejecutan en segundo plano, SIGHUP generalmente significa que deben volver a examinar sus archivos de configuración, por lo que los envía a los procesos en segundo plano después de editar los archivos de configuración.
Sin embargo, no hay una explicación útil de SIGINT en esta página, aparte de que es enviado por CRTL + C. ¿Hay alguna razón por la que uno maneje SIGINT de una manera diferente a SIGTERM? Si es así, ¿cuál sería la razón y cómo sería diferente el manejo?
sudo fuser -l
en el símbolo del sistema. Para mí esto trae a colación:HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
kill -l
obtener una lista de señales.