Welcher Fehlercode wird von einem Prozess, der segfaults zurückgibt, zurückgegeben?

8

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.

    
static_rtti 30.01.2013, 08:35
quelle

2 Antworten

11

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

enthalten ist

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.

    
Basile Starynkevitch 30.01.2013, 08:40
quelle
13

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.

    
NightWhisper 30.01.2013 08:45
quelle