bitlvl
DE

Exit-Code-Referenz

Tippen Sie einen Code, um ihn zu finden. Alles über 128 heißt, der Prozess wurde durch ein Signal beendet: 128 abziehen ergibt die Signalnummer. Die Tabelle ist auf Englisch.

 
CodeNameBedeutung
0SuccessThe command completed without error.
1General errorCatch-all: the program chose to signal failure (grep: no match; many tools: any error).
2Misuse of shell builtin / usage errorBash: wrong arguments to a builtin. grep: an error occurred (not just no match). Many CLIs: bad usage.
64EX_USAGECommand line usage error (sysexits.h).
65EX_DATAERRInput data was incorrect.
66EX_NOINPUTInput file did not exist or was unreadable.
67EX_NOUSERUser does not exist.
68EX_NOHOSTHost does not exist.
69EX_UNAVAILABLEService unavailable.
70EX_SOFTWAREInternal software error.
71EX_OSERROS error (fork failed, etc.).
72EX_OSFILECritical OS file missing.
73EX_CANTCREATCannot create output file.
74EX_IOERRInput/output error.
75EX_TEMPFAILTemporary failure; retry later (mail systems).
76EX_PROTOCOLRemote error in protocol.
77EX_NOPERMPermission denied.
78EX_CONFIGConfiguration error.
100Debian apt / dpkg errorapt-get: a package operation failed. Also Python: nothing standard.
125Docker: daemon errordocker run itself failed (bad option, image not found). Also xargs: command killed by signal / other failures.
126Command cannot executeFound but not executable (permission denied, or a directory). Also Docker: contained command cannot be invoked.
127Command not foundThe shell could not find the program on PATH (typo, missing package, wrong shebang).
128Invalid exit argumentexit called with a value outside 0–255.
129Killed by SIGHUP (128+1)Terminal hung up or daemon reload signal.
130Killed by SIGINT (128+2)Ctrl-C.
131Killed by SIGQUIT (128+3)Ctrl-\ (core dump).
132Killed by SIGILL (128+4)Illegal instruction: corrupted binary or wrong CPU architecture.
133Killed by SIGTRAP (128+5)Debugger breakpoint.
134Killed by SIGABRT (128+6)abort(): assertion failure, glibc detected heap corruption, Go/Rust panic in some modes.
135Killed by SIGBUS (128+7)Bus error: misaligned access or a memory-mapped file that was truncated.
136Killed by SIGFPE (128+8)Arithmetic error, typically integer division by zero.
137Killed by SIGKILL (128+9)Forcibly killed: OOM killer (check dmesg), kill -9, Docker/Kubernetes memory limit, timeout -s KILL.
139Killed by SIGSEGV (128+11)Segmentation fault: invalid memory access.
141Killed by SIGPIPE (128+13)Wrote to a closed pipe, e.g. `cmd | head` after head exited.
143Killed by SIGTERM (128+15)Polite termination request: kill, systemctl stop, docker stop (after the grace period it becomes 137).
148Killed by SIGTSTP (128+20)Ctrl-Z (stopped, reported by some shells).
152Killed by SIGXCPU (128+24)CPU time limit exceeded (ulimit -t).
153Killed by SIGXFSZ (128+25)File size limit exceeded (ulimit -f).
255Exit status out of range / -1exit(-1) wraps to 255. ssh: connection or protocol error. rsync: unexplained error.

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Wie Exit-Codes funktionieren

Jeder Prozess endet mit einem 8-Bit-Status, 0 bis 255. Per Konvention heißt 0 Erfolg und alles andere Fehler; die Shell stellt ihn als $? bereit, und &&, ||, if und set -e verzweigen darauf. Die Bedeutung der Zahl jenseits von null/nicht-null gehört dem Programm, mit ein paar fast universellen Konventionen.

Die Codes der Shell selbst

  • 126: Die Datei wurde gefunden, konnte aber nicht ausgeführt werden. Fehlendes Ausführen-Bit, ein Verzeichnis, ein Binary für eine andere Architektur oder ein noexec-Mount.
  • 127: nicht gefunden. Ein Tippfehler, ein nicht installiertes Programm oder ein PATH, der sich zwischen Ihrer Shell und der Umgebung des Skripts unterscheidet (cron, systemd, Docker). Auch eine Shebang-Zeile auf einen fehlenden Interpreter, einschließlich \r\n-Zeilenenden, die /bin/bash\r ergeben.
  • 128 + n: Der Prozess starb durch Signal n. Die Shell kann ein Signal nicht direkt zurückgeben, also addiert sie 128. 130 ist Strg-C (SIGINT 2), 137 ist SIGKILL (9), 139 ist SIGSEGV (11), 143 ist SIGTERM (15). Die Signalreferenz listet alle.

137 in Containern

Exit 137 aus einem Container ist fast immer der OOM-Killer des Kernels oder die Container-Laufzeit, die ein Speicherlimit durchsetzt: Der Prozess bekam SIGKILL, das sich nicht abfangen lässt, also hat die Anwendung nichts geloggt. Prüfen Sie docker inspect auf OOMKilled: true, dmesg auf „Out of memory“ oder Kubernetes-Events auf OOMKilled. 143 ist das normale Ergebnis von docker stop oder einer Pod-Beendigung, wenn der Prozess SIGTERM behandelt hat; 137 nach einem Stop heißt, er hat sich nicht innerhalb der Frist beendet.

sysexits.h

BSD definierte die Codes 64–78, damit Mail- und Systemwerkzeuge Fehlerkategorien melden (EX_USAGE 64, EX_NOINPUT 66, EX_TEMPFAIL 75…). Postfix, sendmail und manche Perl- und Go-Programme nutzen sie noch; sonst nichts, also betrachten Sie sie als Konvention, nicht als Regel.

Fragen

Was bedeutet Exit-Code 1?

Ein allgemeiner Fehler: Das Programm fand, dass etwas schiefging, und hatte keinen genaueren Code. Bei grep heißt es, keine Zeile passte, was gar kein Fehler ist. Lesen Sie die stderr-Ausgabe des Programms, nicht die Zahl.

Warum bekomme ich 127 in cron oder systemd, aber nicht in meiner Shell?

Der PATH ist anders. Das Profil Ihrer Shell fügt Verzeichnisse wie /usr/local/bin oder ~/.local/bin hinzu, die cron und systemd nicht sehen. Nutzen Sie absolute Pfade oder setzen Sie PATH am Anfang des Skripts.

Was ist der maximale Exit-Code?

255. exit 256 springt auf 0, exit 300 wird zu 44 (300 mod 256). Negative Werte springen ebenfalls: exit(-1) ist 255.

Wie bekomme ich den Exit-Code einer Pipeline?

Standardmäßig ist $? der Status des letzten Befehls. set -o pipefail lässt die Pipeline scheitern, wenn irgendeine Stufe scheitert, und das Array PIPESTATUS in bash enthält den Code jeder Stufe.