Welchen Fehlercode gibt ein Prozess zurück, der segfaults zurückgibt? Aus meinen Experimenten scheint es "139" zu sein, aber ich würde gerne herausfinden, warum das so ist und wie standardisiert es ist.
Der relevante Syscall (der den Status eines abgeschlossenen Prozesses angibt) ist waitpid (2) . Die 139 ist für WIFSIGNALED
und WTERMSIG
etc ... Unter Linux werden die eigentlichen Bits in der internen Datei /usr/include/bits/waitstatus.h
beschrieben, die von <sys/wait.h>
header
Der wait
, waitpid
Aufruf ist Standard in POSIX und so sind die Makronamen (wie WTERMSIG
etc ...). Die tatsächliche Implementierung dieser Makros und die tatsächlichen Signalnummern, daher der von der Shell angegebene Code, sind implementierungsspezifisch.
Die Signal (7) Linux Man-Seite gibt die Anzahl der Signale.
Wenn ein Prozess beendet wird, speichert die Shell nur einen 8-Bit-Rückgabecode, setzt jedoch das hohe Bit, wenn der Prozess abnormal beendet wurde. Da Ihr Prozess jedoch durch einen Segmentierungsfehler beendet wird, ist das gesendete Signal normalerweise SIGSEGV (Invalid memory reference) mit dem Wert 11.
Also, weil Ihr Prozess abnormal beendet wurde, haben Sie eine 128 und dann fügen Sie den Wert des Signals hinzu, das den Prozess beendete, der 11 war, Sie erhalten 139.
Tags und Links c linux unix runtime-error segmentation-fault