Vou postar isso como resposta, para que haja algum tipo de resolução, se esse for o problema.
Um status de saída 0 significa uma saída normal de um programa bem-sucedido. Um programa existente pode escolher qualquer número inteiro entre 0 e 255 como status de saída. Convencionalmente, os programas usam valores pequenos. Os valores 126 e acima são usados pelo shell para relatar condições especiais; portanto, é melhor evitá-las.
No nível da API C, os programas relatam um status de 16 bits¹ que codifica o status de saída do programa e o sinal que o interrompeu , se houver.
No shell, o status de saída de um comando (salvo em $?
) conflita o status de saída real do programa e o valor do sinal: se um programa é morto por um sinal, $?
é definido como um valor maior que 128 (com a maioria dos shells, esse valor é 128 mais o número do sinal; ATT ksh usa 256 + número de sinal e yash usa 384 + número de sinal, o que evita a ambiguidade, mas as outras conchas não seguiram o exemplo).
Em particular, se $?
for 0, seu programa saiu normalmente.
Observe que isso inclui o caso de um processo que recebe o SIGTERM, mas possui um manipulador de sinal e, eventualmente, sai normalmente (talvez como uma conseqüência indireta do sinal do SIGTERM, talvez não).
Para responder à pergunta em seu título, o SIGTERM nunca é enviado automaticamente pelo sistema. Existem alguns sinais que são enviados automaticamente como SIGHUP quando um terminal sai, SIGSEGV / SIGBUS / SIGILL quando um processo faz coisas que não deveriam estar fazendo, SIGPIPE quando grava em um tubo / soquete quebrado etc. alguns sinais enviados devido ao pressionamento de tecla em um terminal, principalmente SIGINT para Ctrl+ C, SIGQUIT para Ctrl+ \e SIGTSTP para Ctrl+ Z, mas o SIGTERM não é um deles. Se um processo recebe o SIGTERM, algum outro processo envia esse sinal.
¹ grosso modo