Ich werde dies als Antwort posten, damit es eine Lösung gibt, falls sich herausstellt, dass dies das Problem ist.
Ein Beendigungsstatus von 0 bedeutet ein normales Beenden eines erfolgreichen Programms. Ein Programm, das beendet wird, kann eine beliebige Ganzzahl zwischen 0 und 255 als Beendigungsstatus auswählen. Herkömmlicherweise verwenden Programme kleine Werte. Werte 126 und höher werden von der Shell verwendet, um spezielle Bedingungen zu melden. Vermeiden Sie sie daher am besten.
Auf der C-API-Ebene melden Programme einen 16-Bit-Status¹ , der sowohl den Exit-Status des Programms als auch das Signal codiert, das es ggf. beendet hat.
In der Shell setzt sich der Exit-Status eines Befehls (gespeichert in $?
) aus dem tatsächlichen Exit-Status des Programms und dem Signalwert zusammen: Wenn ein Programm durch ein Signal beendet wird, $?
wird dieser Wert auf einen Wert größer als 128 gesetzt (bei den meisten Shells ist dies der Wert 128 plus die Signalnummer; ATT ksh verwendet 256 + Signalnummer und Yash 384 + Signalnummer, was die Mehrdeutigkeit vermeidet, aber die anderen Shells folgen nicht).
Insbesondere wenn $?
0 ist, wird Ihr Programm normal beendet.
Beachten Sie, dass dies den Fall eines Prozesses einschließt, der SIGTERM empfängt, jedoch über einen Signal-Handler verfügt und schließlich normal beendet wird (möglicherweise als indirekte Folge des SIGTERM-Signals, möglicherweise nicht).
Um die Frage in Ihrem Titel zu beantworten, wird SIGTERM vom System niemals automatisch gesendet. Es gibt ein paar Signale, die automatisch gesendet werden, wie SIGHUP, wenn ein Terminal ausgeht, SIGSEGV / SIGBUS / SIGILL, wenn ein Prozess Dinge tut, die er nicht tun sollte, SIGPIPE, wenn er auf eine defekte Pipe / Muffe schreibt, usw. Und es gibt Einige Signale, die aufgrund eines Tastendrucks in einem Terminal gesendet werden, hauptsächlich SIGINT für Ctrl+ C, SIGQUIT für Ctrl+ \und SIGTSTP für Ctrl+ Z, aber SIGTERM gehört nicht dazu. Wenn ein Prozess SIGTERM empfängt, hat ein anderer Prozess dieses Signal gesendet.
¹ grob gesagt