Publicaré esto como respuesta para que haya algún tipo de resolución si este es el problema.
Un estado de salida de 0 significa una salida normal de un programa exitoso. Un programa existente puede elegir cualquier número entero entre 0 y 255 como su estado de salida. Convencionalmente, los programas usan valores pequeños. El shell utiliza los valores 126 y superiores para informar condiciones especiales, por lo que es mejor evitarlos.
En el nivel C API, los programas informan un estado de 16 bits bit que codifica tanto el estado de salida del programa como la señal que lo mató, si corresponde.
En el shell, el estado de salida de un comando (guardado en $?
) combina el estado de salida real del programa y el valor de la señal: si un programa es eliminado por una señal, $?
se establece en un valor mayor que 128 (con la mayoría de los shells, este valor es 128 más el número de señal; ATT ksh usa 256 + número de señal y yash usa 384 + número de señal, lo que evita la ambigüedad, pero los otros proyectiles no han seguido el ejemplo).
En particular, si $?
es 0, su programa salió normalmente.
Tenga en cuenta que esto incluye el caso de un proceso que recibe SIGTERM, pero tiene un controlador de señal y finalmente sale normalmente (quizás como consecuencia indirecta de la señal SIGTERM, quizás no).
Para responder la pregunta en su título, SIGTERM nunca es enviado automáticamente por el sistema. Hay algunas señales que se envían automáticamente como SIGHUP cuando un terminal desaparece, SIGSEGV / SIGBUS / SIGILL cuando un proceso hace cosas que no debería estar haciendo, SIGPIPE cuando escribe en un tubo / zócalo roto, etc. Y hay algunas señales que se envían debido a una pulsación de tecla en un terminal, principalmente SIGINT para Ctrl+ C, SIGQUIT para Ctrl+ \y SIGTSTP para Ctrl+ Z, pero SIGTERM no es uno de esos. Si un proceso recibe SIGTERM, algún otro proceso envió esa señal.
¹ más o menos hablando