GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welchen Fehlercode gibt ein Prozess zurück, der Segfaults zurückgibt?

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.


Linux
  1. Was ist, wenn „kill -9“ nicht funktioniert?

  2. Standard-Exit-Code, wenn der Prozess beendet wird?

  3. Was gibt der Befehl Ls -al .* zurück?

  4. Was gibt malloc(0) zurück?

  5. Was ist :-!! im C-Code?

Was zeigt diese Prozessstatistik an?

Was ist die Linux-Prozesstabelle? Woraus besteht es?

Was bedeutet &am Ende eines Linux-Befehls?

Was bedeutet, wenn [[ $? -ne 0 ]]; bedeuten in .ksh

Welche Prozesskiller hat Linux?

Kann ein Prozess einen Besitzer haben? Was bedeutet das?