Je posterai ceci comme réponse afin qu'il y ait une sorte de résolution si cela s'avère être le problème.
Un état de sortie de 0 signifie une sortie normale d'un programme réussi. Un programme sortant peut choisir n'importe quel entier entre 0 et 255 comme état de sortie. Classiquement, les programmes utilisent de petites valeurs. Les valeurs 126 et supérieures sont utilisées par le shell pour signaler des conditions spéciales, il est donc préférable de les éviter.
Au niveau de l'API C, les programmes signalent un état 16 bits¹ qui code à la fois l'état de sortie du programme et le signal qui l'a tué, le cas échéant.
Dans le shell, l'état de sortie d' une commande (enregistré dans $?
) confond l'état de sortie réel du programme et la valeur du signal: si un programme est tué par un signal, il $?
est défini sur une valeur supérieure à 128 (avec la plupart des shells, cette valeur est 128 plus le numéro de signal; ATT ksh utilise 256 + numéro de signal et yash utilise 384 + numéro de signal, ce qui évite toute ambiguïté, mais les autres shells n'ont pas emboîté le pas).
En particulier, si $?
vaut 0, votre programme s'est terminé normalement.
Notez que cela inclut le cas d'un processus qui reçoit SIGTERM, mais a un gestionnaire de signal pour cela, et finit par se terminer normalement (peut-être comme une conséquence indirecte du signal SIGTERM, peut-être pas).
Pour répondre à la question de votre titre, SIGTERM n'est jamais envoyé automatiquement par le système. Il y a quelques signaux qui sont envoyés automatiquement comme SIGHUP quand un terminal disparaît, SIGSEGV / SIGBUS / SIGILL quand un processus fait des choses qu'il ne devrait pas faire, SIGPIPE quand il écrit sur une pipe / socket cassée, etc. Et il y a quelques signaux envoyés en raison d'une pression sur une touche dans un terminal, principalement SIGINT pour Ctrl+ C, SIGQUIT pour Ctrl+ \et SIGTSTP pour Ctrl+ Z, mais SIGTERM n'en fait pas partie. Si un processus reçoit SIGTERM, un autre processus a envoyé ce signal.
¹ en gros