Wenn ein Prozess beendet wird, speichert die Shell nur einen 8-Bit-Rückgabecode, setzt aber das High-Bit, wenn der Prozess abnormal beendet wurde. Da Ihr Prozess jedoch durch einen Segmentierungsfehler beendet wird, lautet das gesendete Signal normalerweise SIGSEGV (Ungültige Speicherreferenz) mit dem Wert 11.
Da Ihr Prozess abnormal beendet wurde, haben Sie also 128, und dann addieren Sie den Wert des Signals, das den Prozess beendet hat, nämlich 11, und Sie erhalten 139.
Der relevante Systemaufruf (der den Status eines beendeten Prozesses angibt) ist waitpid(2). Die 139 steht für WIFSIGNALED
und WTERMSIG
etc... Unter Linux sind die eigentlichen Bits in der internen Datei /usr/include/bits/waitstatus.h
beschrieben die von <sys/wait.h>
enthalten ist Kopfzeile
Die wait
, waitpid
Aufruf ist in POSIX Standard, ebenso wie die Makronamen (wie WTERMSIG
etc...). Die tatsächliche Implementierung dieser Makros und die tatsächlichen Signalnummern, also der von der Shell angegebene Code, sind implementierungsspezifisch.
Die Linux-Manpage signal(7) gibt die Anzahl der Signale an.