Linux-Fehlercodes
Finde heraus, was ein errno wie ECONNREFUSED oder „[Errno 13]“, ein Signal wie SIGKILL oder ein Exit-Code wie 137 bedeutet, mit den Werten von Linux und macOS. Füge die komplette Meldung des Programms, von Docker oder von Kubernetes ein, und das Tool entnimmt ihr den Code.
Beispiele:

208 von 208 Codes

errnoFehler von Systemaufrufen151
EPERM
Linux 1macOS 1

Operation not permitted

Die Operation erfordert Privilegien, die der Prozess nicht hat, etwa den Besitzer einer Datei ändern, ein Signal an einen Prozess eines anderen Benutzers senden oder eine unveränderliche Datei (chattr +i) bearbeiten. Anders als bei EACCES hilft es nicht, die Dateirechte zu ändern: Du brauchst root oder die entsprechende Capability.

ENOENT
Linux 2macOS 2

No such file or directory

Die Datei oder das Verzeichnis existiert nicht. Der Fehler tritt auch auf, wenn ein Zwischenverzeichnis im Pfad fehlt, ein symbolischer Link auf ein nicht existierendes Ziel zeigt oder der Interpreter aus der #!-Zeile eines Skripts nicht installiert ist.

ESRCH
Linux 3macOS 3

No such process

Es gibt keinen Prozess, keine Prozessgruppe und keinen Thread mit dieser Kennung; zum Beispiel bei kill auf eine PID, die bereits beendet ist.

EINTR
Linux 4macOS 4

Interrupted system call

Ein Signal hat den Systemaufruf unterbrochen, bevor er fertig war. Das ist kein echter Fehler: Das Programm sollte den Aufruf wiederholen oder den Signal-Handler mit SA_RESTART installieren.

EIO
Linux 5macOS 5

Input/output error

Ein-/Ausgabefehler auf niedriger Ebene, meist beim Lesen vom oder Schreiben auf das Gerät. Bei Festplatten deutet er oft auf defekte Sektoren oder ein fehlerhaftes Kabel hin: Prüfe dmesg und den SMART-Status. Er tritt auch auf, wenn auf ein bereits geschlossenes Terminal geschrieben wird.

ENXIO
Linux 6macOS 6

No such device or address

macOS: Device not configured

Das Gerät oder die Adresse existiert nicht: Die Gerätedatei ist vorhanden, aber dahinter steckt keine Hardware, oder ein FIFO wurde mit O_NONBLOCK zum Schreiben geöffnet, ohne dass es einen Leser gibt.

E2BIG
Linux 7macOS 7

Argument list too long

Die Liste der Argumente und Umgebungsvariablen, die an exec übergeben wird, ist zu groß. Das ist das klassische „Argument list too long“ bei einem Wildcard, das zu Tausenden von Dateien expandiert; verwende find -exec oder xargs.

ENOEXEC
Linux 8macOS 8

Exec format error

Die Datei hat kein erkanntes ausführbares Format: Sie ist ein Binary für eine andere Architektur, beschädigt oder ein Skript ohne #!-Zeile.

EBADF
Linux 9macOS 9

Bad file descriptor

Der Dateideskriptor ist ungültig, wurde bereits geschlossen oder in einem Modus geöffnet, der die Operation nicht erlaubt, etwa Schreiben in einen nur zum Lesen geöffneten.

ECHILD
Linux 10macOS 10

No child processes

Der Prozess hat keine Kindprozesse, auf die er mit wait oder waitpid warten könnte, oft weil SIGCHLD ignoriert wird und die Kindprozesse automatisch eingesammelt werden.

EAGAIN
Linux 11macOS 35

Resource temporarily unavailable

Die Ressource ist vorübergehend nicht verfügbar, ein erneuter Versuch ist sinnvoll. Bei nicht blockierenden Operationen bedeutet er, dass noch keine Daten oder kein Platz vorhanden sind; bei fork, dass das Limit für Prozesse oder Threads erreicht ist (ulimit -u oder pids.max der cgroup).

Gleicher Wert:EWOULDBLOCK

ENOMEM
Linux 12macOS 12

Cannot allocate memory

Es ist nicht genug Speicher für die Operation vorhanden, oder ein Speicherlimit des Prozesses wurde überschritten. Bei fork oder mmap kann es an der Overcommit-Richtlinie, am Limit der cgroup oder an fehlendem Adressraum liegen.

EACCES
Linux 13macOS 13

Permission denied

Zugriff verweigert durch die Rechte der Datei oder eines Verzeichnisses im Pfad (für jedes ist das Ausführungsrecht nötig), durch eine ACL, durch SELinux oder AppArmor oder durch einen Mount mit noexec. bind gibt ihn auch zurück, wenn ohne Privilegien ein Port unter 1024 verwendet wird.

EFAULT
Linux 14macOS 14

Bad address

Einem Systemaufruf wurde ein Zeiger auf eine ungültige Speicheradresse übergeben. Das deutet auf einen Bug im Programm hin.

ENOTBLK
Linux 15macOS 15

Block device required

Die Operation braucht ein Blockgerät, etwa eine Festplatte, und hat einen anderen Dateityp erhalten; zum Beispiel beim Einhängen einer normalen Datei ohne -o loop.

EBUSY
Linux 16macOS 16

Device or resource busy

macOS: Device / Resource busy

Das Gerät oder die Ressource ist belegt. Typisch beim Aushängen eines Dateisystems, auf dem noch Dateien geöffnet sind oder in dem sich ein Terminal befindet; lsof oder fuser zeigen, welche Prozesse es verwenden.

EEXIST
Linux 17macOS 17

File exists

Es gibt bereits eine Datei, ein Verzeichnis oder ein anderes Objekt mit diesem Namen, zum Beispiel beim Erstellen mit O_EXCL, bei mkdir ohne -p oder beim Anlegen eines Links, dessen Ziel bereits existiert.

EXDEV
Linux 18macOS 18

Invalid cross-device link

macOS: Cross-device link

Zwischen verschiedenen Dateisystemen lässt sich weder ein Hardlink anlegen noch eine Datei umbenennen. mv löst das durch Kopieren und Löschen; Programme, die rename() verwenden, müssen dasselbe tun.

ENODEV
Linux 19macOS 19

No such device

macOS: Operation not supported by device

Das Gerät existiert nicht oder unterstützt die Operation nicht; zum Beispiel beim Einhängen eines Dateisystemtyps, dessen Kernelmodul nicht geladen ist.

ENOTDIR
Linux 20macOS 20

Not a directory

Ein Bestandteil des Pfads, der ein Verzeichnis sein sollte, ist eine Datei, oder es wurde ein Verzeichnis verlangt (O_DIRECTORY), und es ist keines.

EISDIR
Linux 21macOS 21

Is a directory

Es wurde eine Dateioperation auf ein Verzeichnis versucht, etwa es zum Schreiben zu öffnen.

EINVAL
Linux 22macOS 22

Invalid argument

Ein Argument ist für den Aufruf ungültig: ein Wert außerhalb des Bereichs, eine unverträgliche Kombination von Optionen oder eine Operation, die das Objekt nicht unterstützt. Der Fehler ist allgemein: Die man-Page des Aufrufs listet die konkreten Fälle auf.

ENFILE
Linux 23macOS 23

Too many open files in system

Die systemweite Tabelle der geöffneten Dateien ist erschöpft. Das Limit wird mit fs.file-max in sysctl eingestellt.

EMFILE
Linux 24macOS 24

Too many open files

Der Prozess hat sein Limit an offenen Deskriptoren erreicht („Too many open files“). Erhöhe das Limit mit ulimit -n oder mit LimitNOFILE in systemd und prüfe, ob das Programm Dateien oder Sockets nicht schließt.

ENOTTY
Linux 25macOS 25

Inappropriate ioctl for device

Eine Terminaloperation (ioctl) wurde auf etwas angewendet, das kein Terminal ist, zum Beispiel wenn die Ausgabe eines interaktiven Programms in eine Datei oder eine Pipe umgeleitet wird.

ETXTBSY
Linux 26macOS 26

Text file busy

Die ausführbare Datei ist in Benutzung: Man kann nicht in ein Binary schreiben, während es läuft, und keines ausführen, das noch zum Schreiben geöffnet ist. Zum Aktualisieren schreibst du am besten eine neue Datei und benennst sie um.

EFBIG
Linux 27macOS 27

File too large

Die Datei überschreitet die maximale Größe, die das Dateisystem zulässt (4 GB bei FAT32), oder das Limit RLIMIT_FSIZE des Prozesses.

ENOSPC
Linux 28macOS 28

No space left on device

Auf dem Gerät ist kein Platz mehr frei. Wenn df freien Platz anzeigt, prüfe die Inodes mit df -i. inotify gibt ihn auch zurück, wenn fs.inotify.max_user_watches ausgeschöpft ist.

ESPIPE
Linux 29macOS 29

Illegal seek

lseek ist auf einer Pipe, einem FIFO oder einem Socket nicht möglich, weil sie keine Position haben.

EROFS
Linux 30macOS 30

Read-only file system

Das Dateisystem ist schreibgeschützt eingehängt. Wenn es schreibgeschützt wurde, ohne dass jemand das verlangt hat, hat der Kernel Fehler erkannt: Prüfe dmesg und führe fsck aus.

EMLINK
Linux 31macOS 31

Too many links

Die maximale Anzahl an Hardlinks auf eine Datei wurde überschritten, bei manchen Dateisystemen auch die an Unterverzeichnissen eines Verzeichnisses.

EPIPE
Linux 32macOS 32

Broken pipe

Es wurde in eine Pipe oder einen Socket geschrieben, deren anderes Ende bereits geschlossen ist („Broken pipe“). Zusätzlich zum Fehler erhält der Prozess SIGPIPE; das ist normal, wenn der Leser früher endet, wie bei cmd | head.

EDOM
Linux 33macOS 33

Numerical argument out of domain

Das Argument einer mathematischen Funktion liegt außerhalb ihres Definitionsbereichs, etwa die Quadratwurzel einer negativen Zahl.

ERANGE
Linux 34macOS 34

Numerical result out of range

macOS: Result too large

Das Ergebnis einer Funktion ist zu groß oder zu klein, um dargestellt zu werden, oder ein Puffer reicht für das Ergebnis nicht aus, wie bei getcwd mit einem zu kurzen Puffer.

EDEADLK
Linux 35macOS 11

Resource deadlock avoided

Ein Deadlock wurde verhindert: Der angeforderte Lock, etwa eine Dateisperre mit fcntl oder ein Mutex mit Fehlererkennung, hätte ewig gewartet.

Gleicher Wert:EDEADLOCK

ENAMETOOLONG
Linux 36macOS 63

File name too long

Der Pfad oder einer seiner Bestandteile überschreitet die maximale Länge: unter Linux in der Regel 255 Bytes pro Name und 4096 pro Pfad.

ENOLCK
Linux 37macOS 77

No locks available

Es sind keine Locks verfügbar. Bei NFS bedeutet das meist, dass der Sperrdienst (lockd oder rpc.statd) nicht läuft.

ENOSYS
Linux 38macOS 78

Function not implemented

Der Systemaufruf existiert in diesem Kernel nicht oder ist nicht implementiert. Typisch bei Binaries, die für einen neueren Kernel kompiliert wurden, oder bei seccomp-Profilen von Containern, die neuere Aufrufe nicht kennen.

ENOTEMPTY
Linux 39macOS 66

Directory not empty

Das Verzeichnis ist nicht leer, zum Beispiel bei rmdir oder beim Umbenennen über ein bestehendes Verzeichnis. Um es samt Inhalt zu löschen, verwende rm -r.

ELOOP
Linux 40macOS 62

Too many levels of symbolic links

Beim Auflösen des Pfads sind zu viele symbolische Links verkettet, normalerweise wegen einer Schleife, oder O_NOFOLLOW wurde auf einen symbolischen Link angewendet.

ENOMSG
Linux 42macOS 91

No message of desired type

In der System-V-Nachrichtenwarteschlange gibt es keine Nachricht des angeforderten Typs.

EIDRM
Linux 43macOS 90

Identifier removed

Die System-V-IPC-Kennung (Warteschlange, Semaphor oder Shared Memory) wurde entfernt, während der Prozess sie verwendete.

ECHRNG
Linux 44macOS —

Channel number out of range

Kanalnummer außerhalb des Bereichs. Ein Legacy-Code ohne praktische Verwendung unter Linux.

EL2NSYNC
Linux 45macOS —

Level 2 not synchronized

Level 2 nicht synchronisiert. Ein Legacy-Code aus System V ohne praktische Verwendung unter Linux.

EL3HLT
Linux 46macOS —

Level 3 halted

Level 3 angehalten. Ein Legacy-Code aus System V ohne praktische Verwendung unter Linux.

EL3RST
Linux 47macOS —

Level 3 reset

Level 3 zurückgesetzt. Ein Legacy-Code aus System V ohne praktische Verwendung unter Linux.

ELNRNG
Linux 48macOS —

Link number out of range

Link-Nummer außerhalb des Bereichs. Ein Legacy-Code ohne praktische Verwendung unter Linux.

EUNATCH
Linux 49macOS —

Protocol driver not attached

Der Protokolltreiber ist nicht angebunden. Nur wenige Subsysteme verwenden ihn, etwa einige Bluetooth-Treiber.

ENOCSI
Linux 50macOS —

No CSI structure available

Keine CSI-Struktur verfügbar. Ein Legacy-Code ohne praktische Verwendung unter Linux.

EL2HLT
Linux 51macOS —

Level 2 halted

Level 2 angehalten. Ein Legacy-Code aus System V ohne praktische Verwendung unter Linux.

EBADE
Linux 52macOS —

Invalid exchange

Ungültiger Austausch. Ein Legacy-Code, den einige Treiber und Dateisysteme mit eigener Bedeutung wiederverwenden.

EBADR
Linux 53macOS —

Invalid request descriptor

Ungültiger Anfragedeskriptor. Ein Legacy-Code, den einige Treiber mit eigener Bedeutung wiederverwenden.

EXFULL
Linux 54macOS —

Exchange full

Austausch voll. Ein Legacy-Code ohne praktische Verwendung unter Linux.

ENOANO
Linux 55macOS —

No anode

Kein „anode“ vorhanden. Ein Legacy-Code ohne praktische Verwendung unter Linux.

EBADRQC
Linux 56macOS —

Invalid request code

Ungültiger Anfragecode. Ein Legacy-Code; einige Treiber verwenden ihn für Befehle, die sie nicht unterstützen.

EBADSLT
Linux 57macOS —

Invalid slot

Ungültiger Slot. Ein Legacy-Code ohne praktische Verwendung unter Linux.

EBFONT
Linux 59macOS —

Bad font file format

Ungültiges Format der Schriftartdatei. Ein Legacy-Code ohne praktische Verwendung unter Linux.

ENOSTR
Linux 60macOS 99

Device not a stream

macOS: Not a STREAM

Das Gerät ist kein STREAM. Gehört zur STREAMS-Schnittstelle von System V, die Linux nicht implementiert.

ENODATA
Linux 61macOS 96

No data available

macOS: No message available on STREAM

Keine Daten verfügbar. Unter Linux gibt getxattr ihn zurück, wenn das erweiterte Attribut nicht existiert; unter macOS heißt dieser Fall ENOATTR.

ETIME
Linux 62macOS 101

Timer expired

macOS: STREAM ioctl timeout

Ein Timer ist abgelaufen. Stammt aus STREAMS; unter Linux verwenden ihn einige Treiber und io_uring für Operationen mit Zeitlimit.

ENOSR
Linux 63macOS 98

Out of streams resources

macOS: No STREAM resources

Keine STREAMS-Ressourcen mehr verfügbar, eine Schnittstelle, die Linux nicht implementiert.

ENONET
Linux 64macOS —

Machine is not on the network

Der Rechner ist nicht im Netzwerk. Ein selten verwendeter Legacy-Code.

ENOPKG
Linux 65macOS —

Package not installed

Das Paket ist nicht installiert. Ein Legacy-Code; einige Subsysteme verwenden ihn, wenn ein Modul fehlt, zum Beispiel ein kryptografisches.

EREMOTE
Linux 66macOS 71

Object is remote

macOS: Too many levels of remote in path

Das Objekt ist entfernt. Bei NFS bezeichnet er einen Pfad, der von einem anderen Server exportiert wird.

ENOLINK
Linux 67macOS 97

Link has been severed

Die Verbindung wurde getrennt. Ein Legacy-Code; einige Treiber verwenden ihn, wenn die Verbindung zum Gerät verloren geht.

EADV
Linux 68macOS —

Advertise error

Fehler bei „advertise“. Ein Legacy-Code aus RFS ohne Verwendung unter Linux.

ESRMNT
Linux 69macOS —

Srmount error

Fehler bei „srmount“. Ein Legacy-Code aus RFS ohne Verwendung unter Linux.

ECOMM
Linux 70macOS —

Communication error on send

Kommunikationsfehler beim Senden. Ein Legacy-Code; einige Netzwerk- und USB-Treiber verwenden ihn.

EPROTO
Linux 71macOS 100

Protocol error

Protokollfehler: Die Gegenseite oder das Gerät hat etwas Unerwartetes geantwortet. Tritt bei USB-Geräten auf und bei Verbindungen, die mitten in einem Austausch abbrechen.

EMULTIHOP
Linux 72macOS 95

Multihop attempted

Es wurde ein mehrfacher Sprung (Multihop) versucht. Ein Legacy-Code aus RFS.

EDOTDOT
Linux 73macOS —

RFS specific error

RFS-spezifischer Fehler. Ohne Verwendung unter Linux.

EBADMSG
Linux 74macOS 94

Bad message

Die Nachricht ist fehlerhaft oder beschädigt. ext4, XFS und Btrfs geben ihn mit dem Alias EFSBADCRC zurück, wenn die Prüfsumme der Metadaten nicht stimmt.

Gleicher Wert:EFSBADCRC

EOVERFLOW
Linux 75macOS 84

Value too large for defined data type

macOS: Value too large to be stored in data type

Der Wert passt nicht in den Zieldatentyp; zum Beispiel ein 32-Bit-Programm, das ohne Unterstützung für große Dateien kompiliert wurde und eine Datei über 2 GB öffnet.

ENOTUNIQ
Linux 76macOS —

Name not unique on network

Der Name ist im Netzwerk nicht eindeutig. Ein Legacy-Code.

EBADFD
Linux 77macOS —

File descriptor in bad state

Der Dateideskriptor ist in einem falschen Zustand. ALSA und einige Treiber verwenden ihn, wenn das Gerät nicht bereit ist.

EREMCHG
Linux 78macOS —

Remote address changed

Die entfernte Adresse hat sich geändert. Ein Legacy-Code.

ELIBACC
Linux 79macOS —

Can not access a needed shared library

Auf eine benötigte Shared Library kann nicht zugegriffen werden. Ein Legacy-Code aus den a.out-Binaries.

ELIBBAD
Linux 80macOS —

Accessing a corrupted shared library

Die Shared Library ist beschädigt. Ein Legacy-Code aus den a.out-Binaries.

ELIBSCN
Linux 81macOS —

.lib section in a.out corrupted

Der .lib-Abschnitt des a.out-Binarys ist beschädigt. Ein Legacy-Code.

ELIBMAX
Linux 82macOS —

Attempting to link in too many shared libraries

Es wurde versucht, zu viele Shared Libraries zu linken. Ein Legacy-Code aus a.out.

ELIBEXEC
Linux 83macOS —

Cannot exec a shared library directly

Eine Shared Library kann nicht direkt ausgeführt werden. Ein Legacy-Code aus a.out.

EILSEQ
Linux 84macOS 92

Invalid or incomplete multibyte or wide character

macOS: Illegal byte sequence

Die Bytefolge ist für die Zeichenkodierung ungültig, etwa ein Text, der kein gültiges UTF-8 ist, bei der Konvertierung mit iconv oder mit den Multibyte-Funktionen.

ERESTART
Linux 85macOS —

Interrupted system call should be restarted

Der unterbrochene Aufruf muss neu gestartet werden. Wird intern vom Kernel verwendet und sollte nicht bei Programmen ankommen.

ESTRPIPE
Linux 86macOS —

Streams pipe error

Pipe-Fehler von STREAMS. ALSA gibt ihn zurück, wenn das Audiogerät im Ruhezustand ist.

EUSERS
Linux 87macOS 68

Too many users

Zu viele Benutzer. Das Festplattenquotensystem gibt ihn zurück, wenn seine Tabelle voll ist; er ist selten.

ENOTSOCK
Linux 88macOS 38

Socket operation on non-socket

Eine Socket-Operation wurde auf einen Deskriptor angewendet, der kein Socket ist.

EDESTADDRREQ
Linux 89macOS 39

Destination address required

Die Zieladresse fehlt: Über einen verbindungslosen Socket wurde gesendet, ohne anzugeben, wohin.

EMSGSIZE
Linux 90macOS 40

Message too long

Die Nachricht ist zu groß für den Socket, etwa ein UDP-Datagramm, das größer als das Maximum oder als die MTU ist, wenn Fragmentierung nicht erlaubt ist.

EPROTOTYPE
Linux 91macOS 41

Protocol wrong type for socket

Das Protokoll passt nicht zum Socket-Typ.

ENOPROTOOPT
Linux 92macOS 42

Protocol not available

Die angeforderte Socket-Option oder das Protokoll ist nicht verfügbar, zum Beispiel eine Option von setsockopt, die der Kernel nicht kennt.

EPROTONOSUPPORT
Linux 93macOS 43

Protocol not supported

Das Protokoll wird nicht unterstützt, zum Beispiel weil sein Kernelmodul nicht geladen ist.

ESOCKTNOSUPPORT
Linux 94macOS 44

Socket type not supported

Der Socket-Typ wird in dieser Adressfamilie nicht unterstützt.

EOPNOTSUPP
Linux 95macOS 102

Operation not supported

macOS: Operation not supported on socket

Die Operation wird vom Socket oder vom Objekt nicht unterstützt. Unter Linux hat er denselben Wert wie ENOTSUP, und viele Dateisysteme geben ihn für Funktionen zurück, die sie nicht implementieren, etwa fallocate oder erweiterte Attribute.

ENOTSUP
Linux 95macOS 45

Operation not supported

Die Operation wird nicht unterstützt. Unter Linux hat er denselben Wert wie EOPNOTSUPP (95); unter macOS sind es verschiedene Codes.

EPFNOSUPPORT
Linux 96macOS 46

Protocol family not supported

Die Protokollfamilie wird nicht unterstützt.

EAFNOSUPPORT
Linux 97macOS 47

Address family not supported by protocol

macOS: Address family not supported by protocol family

Die Adressfamilie wird nicht unterstützt; typisch bei IPv6 auf einem System oder in einem Container, in dem es deaktiviert ist.

EADDRINUSE
Linux 98macOS 48

Address already in use

Adresse und Port werden bereits verwendet: Ein anderer Prozess lauscht auf diesem Port, oder die vorherige Verbindung ist noch in TIME_WAIT. Finde den Prozess mit ss -ltnp oder lsof -i :PORT, oder verwende SO_REUSEADDR.

EADDRNOTAVAIL
Linux 99macOS 49

Cannot assign requested address

macOS: Can't assign requested address

Die angeforderte Adresse kann nicht zugewiesen werden: Die IP gehört zu keiner Schnittstelle des Rechners, oder die ephemeren Ports für ausgehende Verbindungen sind erschöpft.

ENETDOWN
Linux 100macOS 50

Network is down

Die Netzwerkschnittstelle ist ausgefallen.

ENETUNREACH
Linux 101macOS 51

Network is unreachable

Das Zielnetz ist nicht erreichbar, weil es keine Route dorthin gibt. Prüfe die Routingtabelle und das Gateway; das passiert auch beim Verbinden über IPv6 ohne IPv6-Konnektivität.

ENETRESET
Linux 102macOS 52

Network dropped connection on reset

Das Netzwerk hat die Verbindung zurückgesetzt, zum Beispiel wenn ein Keepalive fehlschlägt.

ECONNABORTED
Linux 103macOS 53

Software caused connection abort

Die Verbindung wurde auf der lokalen Seite abgebrochen, zum Beispiel weil der Client sie geschlossen hat, bevor der Server sie mit accept angenommen hat.

ECONNRESET
Linux 104macOS 54

Connection reset by peer

Die Gegenseite hat die Verbindung abrupt mit einem RST getrennt („Connection reset by peer“): Der entfernte Prozess wurde beendet, eine Firewall oder ein Load Balancer hat die inaktive Verbindung getrennt, oder es wurden Daten gesendet, die die Gegenseite nicht erwartet hat.

ENOBUFS
Linux 105macOS 55

No buffer space available

Im Kernel ist kein Pufferplatz für die Netzwerkoperation verfügbar; tritt meist bei hohem Datenverkehr oder vollen Socket-Warteschlangen auf.

EISCONN
Linux 106macOS 56

Transport endpoint is already connected

macOS: Socket is already connected

Der Socket ist bereits verbunden.

ENOTCONN
Linux 107macOS 57

Transport endpoint is not connected

macOS: Socket is not connected

Der Socket ist nicht verbunden: Es wurde versucht, vor dem Verbinden zu senden oder zu empfangen, oder die Verbindung wurde bereits geschlossen. Bei einem FUSE-Mount erscheint er als „Transport endpoint is not connected“, wenn dessen Prozess gestorben ist; das behebst du durch Aushängen mit fusermount -u.

ESHUTDOWN
Linux 108macOS 58

Cannot send after transport endpoint shutdown

macOS: Can't send after socket shutdown

Nachdem diese Richtung des Sockets mit shutdown geschlossen wurde, kann nicht mehr gesendet werden.

ETOOMANYREFS
Linux 109macOS 59

Too many references: cannot splice

macOS: Too many references: can't splice

Zu viele Referenzen; unter Linux beim Übergeben zu vieler verschachtelter Deskriptoren über einen Unix-Socket.

ETIMEDOUT
Linux 110macOS 60

Connection timed out

macOS: Operation timed out

Die Wartezeit für die Verbindung ist abgelaufen, weil das Ziel nicht geantwortet hat. Meist liegt es an einer Firewall, die Pakete stillschweigend verwirft, an einem ausgeschalteten Host oder an einer Route, die nicht ankommt.

ECONNREFUSED
Linux 111macOS 61

Connection refused

Das Ziel hat die Verbindung abgelehnt: Der Rechner antwortet, aber auf diesem Port lauscht niemand, oder eine Firewall antwortet mit einer Ablehnung. Prüfe, ob der Dienst läuft und auf der richtigen Schnittstelle lauscht, nicht nur auf 127.0.0.1.

EHOSTDOWN
Linux 112macOS 64

Host is down

Der Zielhost ist ausgefallen.

EHOSTUNREACH
Linux 113macOS 65

No route to host

Es gibt keine Route zum Host: Er antwortet im lokalen Netz nicht auf ARP, oder ein Router oder eine Firewall meldet, dass er nicht erreichbar ist.

EALREADY
Linux 114macOS 37

Operation already in progress

Auf dem Socket läuft bereits eine Operation, etwa ein nicht blockierendes connect, das noch nicht abgeschlossen ist.

EINPROGRESS
Linux 115macOS 36

Operation now in progress

Die Operation läuft: Ein nicht blockierendes connect wurde gestartet und wird später abgeschlossen. Das ist kein Fehler; warte mit poll oder select.

ESTALE
Linux 116macOS 70

Stale file handle

macOS: Stale NFS file handle

Das Datei-Handle ist veraltet: Bei NFS wurde die Datei oder das Verzeichnis auf dem Server gelöscht oder ersetzt. Abhilfe schafft erneutes Öffnen des Pfads oder erneutes Einhängen.

EUCLEAN
Linux 117macOS —

Structure needs cleaning

Die Struktur muss bereinigt werden: Das Dateisystem hat eine Beschädigung erkannt (bei ext4 und XFS mit dem Alias EFSCORRUPTED). Hänge es aus und führe fsck oder xfs_repair aus.

Gleicher Wert:EFSCORRUPTED

ENOTNAM
Linux 118macOS —

Not a XENIX named type file

Keine benannte XENIX-Datei. Ein ungenutzter Legacy-Code.

ENAVAIL
Linux 119macOS —

No XENIX semaphores available

Keine XENIX-Semaphoren verfügbar. Ein ungenutzter Legacy-Code.

EISNAM
Linux 120macOS —

Is a named type file

Ist eine benannte XENIX-Datei. Ein ungenutzter Legacy-Code.

EREMOTEIO
Linux 121macOS —

Remote I/O error

Entfernter E/A-Fehler, zum Beispiel von einem I2C-Gerät oder einer entfernten Festplatte, die nicht geantwortet hat.

EDQUOT
Linux 122macOS 69

Disk quota exceeded

macOS: Disc quota exceeded

Das Festplattenkontingent des Benutzers oder der Gruppe wurde überschritten.

ENOMEDIUM
Linux 123macOS —

No medium found

Im Gerät ist kein Medium, etwa ein Laufwerk ohne Disc oder ein leerer Kartenleser.

EMEDIUMTYPE
Linux 124macOS —

Wrong medium type

Der Medientyp ist falsch.

ECANCELED
Linux 125macOS 89

Operation canceled

Die Operation wurde abgebrochen, zum Beispiel eine asynchrone E/A oder ein Warten von io_uring.

ENOKEY
Linux 126macOS —

Required key not available

Der benötigte Schlüssel ist nicht im Keyring des Kernels. Tritt bei verschlüsselten Dateisystemen wie fscrypt oder eCryptfs auf, wenn der Schlüssel nicht geladen wurde.

EKEYEXPIRED
Linux 127macOS —

Key has expired

Der Schlüssel ist abgelaufen. PAM und Kerberos verwenden ihn auch, wenn das Passwort oder das Ticket abgelaufen ist.

EKEYREVOKED
Linux 128macOS —

Key has been revoked

Der Schlüssel wurde widerrufen.

EKEYREJECTED
Linux 129macOS —

Key was rejected by service

Der Dienst hat den Schlüssel abgelehnt.

EOWNERDEAD
Linux 130macOS 105

Owner died

macOS: Previous owner died

Der Besitzer eines robusten Mutex ist gestorben, ohne ihn freizugeben. Der neue Besitzer muss den geschützten Zustand konsistent machen und pthread_mutex_consistent aufrufen.

ENOTRECOVERABLE
Linux 131macOS 104

State not recoverable

Der durch einen robusten Mutex geschützte Zustand kann nicht wiederhergestellt werden, weil der vorherige Besitzer gestorben ist und niemand ihn als konsistent markiert hat.

ERFKILL
Linux 132macOS —

Operation not possible due to RF-kill

Die Operation ist nicht möglich, weil das WLAN- oder Bluetooth-Funkmodul durch RF-kill blockiert ist. Prüfe rfkill list, den Hardwareschalter oder die Flugmodus-Taste.

EHWPOISON
Linux 133macOS —

Memory page has hardware error

Die Speicherseite hat einen Hardwarefehler, und der Kernel hat sie als vergiftet markiert.

EFTYPE
Linux 134macOS 79

Inappropriate file type or format

Der Dateityp ist für die Operation ungeeignet. Unter macOS und BSD gibt es ihn schon lange; unter Linux wurde er erst kürzlich hinzugefügt.

EPROCLIM
Linux —macOS 67

Too many processes

Zu viele Prozesse. BSD definiert ihn für das Prozesslimit, in der Praxis gibt fork aber EAGAIN zurück.

EBADRPC
Linux —macOS 72

RPC struct is bad

Die RPC-Struktur ist fehlerhaft (Sun RPC, das NFS verwendet).

ERPCMISMATCH
Linux —macOS 73

RPC version wrong

Die RPC-Version stimmt nicht überein (Sun RPC, das NFS verwendet).

EPROGUNAVAIL
Linux —macOS 74

RPC program not available

macOS: RPC prog. not avail

Das RPC-Programm ist auf dem Server nicht verfügbar.

EPROGMISMATCH
Linux —macOS 75

RPC program version wrong

macOS: Program version wrong

Die Version des RPC-Programms stimmt nicht überein.

EPROCUNAVAIL
Linux —macOS 76

RPC bad procedure for program

macOS: Bad procedure for program

Die Prozedur existiert im RPC-Programm nicht.

EAUTH
Linux —macOS 80

Authentication error

Authentifizierungsfehler, zum Beispiel beim Einhängen einer NFS-Freigabe.

ENEEDAUTH
Linux —macOS 81

Need authenticator

Für die Operation wird ein Authentifikator benötigt.

EPWROFF
Linux —macOS 82

Device power is off

Das Gerät ist ausgeschaltet.

EDEVERR
Linux —macOS 83

Device error, e.g. paper out

Gerätefehler, zum Beispiel ein Drucker ohne Papier.

EBADEXEC
Linux —macOS 85

Bad executable

Die ausführbare Datei ist ungültig.

EBADARCH
Linux —macOS 86

Bad CPU type in executable

Die ausführbare Datei ist für einen anderen CPU-Typ, etwa ein reines x86_64-Binary auf einem Mac mit Apple Silicon ohne Rosetta 2 oder ein ARM-Binary auf einem Mac mit Intel.

ESHLIBVERS
Linux —macOS 87

Shared library version mismatch

Die Version der Shared Library stimmt nicht überein.

EBADMACHO
Linux —macOS 88

Malformed Macho file

Die Mach-O-Datei ist fehlerhaft oder beschädigt.

ENOATTR
Linux —macOS 93

Attribute not found

Das erweiterte Attribut existiert nicht; entspricht ENODATA unter Linux. Tritt bei xattr auf, zum Beispiel beim Entfernen von com.apple.quarantine von einer Datei, die es nicht hat.

ENOPOLICY
Linux —macOS 103

No such policy registered

Im MAC Framework ist keine Richtlinie mit diesem Namen registriert.

EQFULL
Linux —macOS 106

Interface output queue is full

Die Ausgabewarteschlange der Netzwerkschnittstelle ist voll.

ENOTCAPABLE
Linux —macOS 107

Capabilities insufficient

Die Capabilities reichen nicht aus: Aufrufe, die eine Sandbox einschränkt, geben ihn zurück.

SIGSignale33
SIGHUP
Linux 1macOS 1

Hangup

Das Terminal, das den Prozess steuerte, wurde geschlossen, oder die SSH-Sitzung wurde getrennt. Viele Daemons wie nginx, sshd oder rsyslog verstehen es als Aufforderung, die Konfiguration neu zu laden; nohup, tmux und screen verhindern, dass es die Prozesse beim Abmelden beendet.

Beendet den Prozess
SIGINT
Linux 2macOS 2

Interrupt

Unterbrechung über die Tastatur mit Ctrl+C. Das Programm kann es abfangen, um sich geordnet zu beenden. Exit-Code 130.

Beendet den Prozess
SIGQUIT
Linux 3macOS 3

Quit

Beenden über die Tastatur mit Ctrl+\. Beendet den Prozess mit Core-Dump; die JVM verwendet es dagegen, um den Zustand der Threads auszugeben.

Beendet mit Core-Dump
SIGILL
Linux 4macOS 4

Illegal instruction

Der Prozessor ist auf eine illegale Instruktion gestoßen: ein Binary, das für eine neuere CPU kompiliert wurde (zum Beispiel mit AVX2 oder AVX-512 auf einem Prozessor, der sie nicht hat), beschädigter Code oder ein Sprung in Daten.

Beendet mit Core-Dump
SIGTRAP
Linux 5macOS 5

Trace/breakpoint trap

Debug-Trap: Debugger verwenden es für Haltepunkte. Kommt es ohne Debugger, ist es meist ein Fehler, den das Programm selbst erkannt hat, wie die Prüfungen von Swift unter macOS.

Beendet mit Core-Dump
SIGABRT
Linux 6macOS 6

Aborted

Der Prozess hat abort() aufgerufen: eine fehlgeschlagene Assertion, eine nicht abgefangene C++-Ausnahme oder eine von der C-Bibliothek erkannte Heap-Beschädigung („double free or corruption“). Exit-Code 134.

Beendet mit Core-Dump

Gleicher Wert:SIGIOT

SIGBUS
Linux 7macOS 10

Bus error

Busfehler: ein Zugriff auf falsch ausgerichteten Speicher auf manchen Architekturen oder auf einen Teil einer mit mmap eingeblendeten Datei, der nicht mehr existiert, weil die Datei gekürzt wurde. Passiert auch, wenn /dev/shm voll ist.

Beendet mit Core-Dump
SIGFPE
Linux 8macOS 8

Floating point exception

Arithmetische Ausnahme. Trotz des Namens ist die häufigste Ursache eine Ganzzahldivision durch null.

Beendet mit Core-Dump
SIGKILL
Linux 9macOS 9

Killed

Beendet den Prozess sofort: Es kann weder abgefangen noch blockiert noch ignoriert werden. Gesendet wird es von kill -9, vom OOM Killer des Kernels, wenn der Speicher ausgeht, und von Docker oder Kubernetes, wenn ein Container sein Speicherlimit überschreitet (OOMKilled) oder sich nach SIGTERM nicht rechtzeitig beendet. Exit-Code 137.

Beendet den ProzessKann nicht abgefangen werden
SIGUSR1
Linux 10macOS 30

User defined signal 1

Freies Signal, das jede Anwendung für eigene Zwecke nutzen kann; zum Beispiel meldet dd damit seinen Fortschritt, und nginx öffnet die Logs neu.

Beendet den Prozess
SIGSEGV
Linux 11macOS 11

Segmentation fault

Segmentverletzung („Segmentation fault“): ein Zugriff auf ungültigen Speicher, etwa das Dereferenzieren eines Nullzeigers, das Überschreiten der Grenzen eines Arrays oder ein Stacküberlauf durch eine Endlosrekursion. Exit-Code 139.

Beendet mit Core-Dump
SIGUSR2
Linux 12macOS 31

User defined signal 2

Zweites freies Signal, das jede Anwendung für eigene Zwecke nutzen kann.

Beendet den Prozess
SIGPIPE
Linux 13macOS 13

Broken pipe

Schreiben in eine Pipe oder einen Socket ohne Leser. Normal bei cmd | head, wo der Leser früher endet; Server ignorieren es meist und behandeln den Fehler EPIPE. Exit-Code 141.

Beendet den Prozess
SIGALRM
Linux 14macOS 14

Alarm clock

Der mit alarm oder setitimer gestellte Timer ist abgelaufen.

Beendet den Prozess
SIGTERM
Linux 15macOS 15

Terminated

Aufforderung zum geordneten Beenden. Es ist das Standardsignal von kill, systemctl stop, docker stop und von Kubernetes beim Löschen eines Pods; der Prozess sollte seine Verbindungen schließen und sich beenden. Exit-Code 143.

Beendet den Prozess
SIGSTKFLT
Linux 16macOS —

Stack fault

Stackfehler des Koprozessors. Wird im aktuellen Linux nicht verwendet.

Beendet den Prozess
SIGCHLD
Linux 17macOS 20

Child exited

Ein Kindprozess wurde beendet, angehalten oder fortgesetzt. Der Elternprozess muss ihn mit wait einsammeln; tut er das nicht, bleibt das Kind als Zombie zurück.

Wird ignoriert

Gleicher Wert:SIGCLD

SIGCONT
Linux 18macOS 19

Continued

Setzt einen angehaltenen Prozess fort, wie es fg und bg in der Shell tun.

Setzt den Prozess fort
SIGSTOP
Linux 19macOS 17

Stopped (signal)

Hält den Prozess an; es kann weder abgefangen noch ignoriert werden. Fortgesetzt wird er mit SIGCONT.

Hält den Prozess anKann nicht abgefangen werden
SIGTSTP
Linux 20macOS 18

Stopped

Anhalten über das Terminal mit Ctrl+Z. Anders als SIGSTOP kann das Programm es abfangen.

Hält den Prozess an
SIGTTIN
Linux 21macOS 21

Stopped (tty input)

Ein Hintergrundprozess hat versucht, vom Terminal zu lesen.

Hält den Prozess an
SIGTTOU
Linux 22macOS 22

Stopped (tty output)

Ein Hintergrundprozess hat versucht, bei aktivem stty tostop auf das Terminal zu schreiben oder dessen Konfiguration zu ändern.

Hält den Prozess an
SIGURG
Linux 23macOS 16

Urgent I/O condition

Auf einem Socket sind dringende Daten (Out-of-Band) eingetroffen. Go verwendet es intern, um Goroutinen zu unterbrechen.

Wird ignoriert
SIGXCPU
Linux 24macOS 24

CPU time limit exceeded

Das CPU-Zeitlimit des Prozesses wurde überschritten (ulimit -t).

Beendet mit Core-Dump
SIGXFSZ
Linux 25macOS 25

File size limit exceeded

Die für den Prozess zulässige maximale Dateigröße wurde überschritten (ulimit -f).

Beendet mit Core-Dump
SIGVTALRM
Linux 26macOS 26

Virtual timer expired

Der virtuelle Timer ist abgelaufen, der nur die CPU-Zeit des Prozesses zählt.

Beendet den Prozess
SIGPROF
Linux 27macOS 27

Profiling timer expired

Der Profiling-Timer ist abgelaufen, den Profiler verwenden.

Beendet den Prozess
SIGWINCH
Linux 28macOS 28

Window changed

Die Größe des Terminalfensters hat sich geändert; Vollbildprogramme nutzen es, um sich neu zu zeichnen.

Wird ignoriert
SIGIO
Linux 29macOS 23

input/output possible signal

Auf einem mit O_ASYNC konfigurierten Deskriptor ist E/A möglich. Unter Linux ist SIGPOLL dasselbe Signal.

Beendet den Prozess

Gleicher Wert:SIGPOLL

SIGPWR
Linux 30macOS —

Power failure

Stromausfall, den eine USV-Software dem init-System meldet.

Beendet den Prozess
SIGSYS
Linux 31macOS 12

Bad system call

Ungültiger Systemaufruf. Heute ist die übliche Ursache ein seccomp-Filter, der ihn blockiert, etwa in Containern.

Beendet mit Core-Dump
SIGEMT
Linux —macOS 7

EMT trap

Emulator-Trap (EMT). Gibt es unter macOS und BSD, aber nicht unter Linux auf x86 oder ARM.

Beendet mit Core-Dump
SIGINFO
Linux —macOS 29

Information request

Informationsanforderung mit Ctrl+T im Terminal von macOS und BSD; viele Befehle reagieren darauf, indem sie ihren Fortschritt anzeigen.

Wird ignoriert
$?Exit-Codes24
0EXIT_SUCCESS

Der Befehl wurde erfolgreich beendet. Es ist der einzige Code, der Erfolg bedeutet: Jeder andere Wert zeigt einen Fehler an.

C
1EXIT_FAILURE

Allgemeiner Fehler; jedes Programm legt selbst fest, was er bedeutet. Die Details stehen meist in dem, was der Befehl auf stderr ausgegeben hat. grep und diff verwenden ihn mit anderer Bedeutung: „keine Treffer gefunden“ bzw. „die Dateien unterscheiden sich“.

C
2Misuse of shell builtins

Falsche Verwendung eines Shell-Builtins oder Syntaxfehler im Skript. Viele Programme verwenden ihn auch für ungültige Optionen, und grep für echte Fehler.

Bash
64EX_USAGE

Der Befehl wurde falsch verwendet: Es fehlen Argumente, es sind zu viele, oder eine Option ist falsch.

sysexits.h
65EX_DATAERR

Die Eingabedaten haben ein falsches Format.

sysexits.h
66EX_NOINPUT

Eine Eingabedatei existiert nicht oder kann nicht gelesen werden.

sysexits.h
67EX_NOUSER

Der angegebene Benutzer existiert nicht; wird vor allem von Mailprogrammen verwendet.

sysexits.h
68EX_NOHOST

Der Hostname existiert nicht.

sysexits.h
69EX_UNAVAILABLE

Ein benötigter Dienst ist nicht verfügbar, oder etwas ist fehlgeschlagen, das in keine andere Kategorie passt.

sysexits.h
70EX_SOFTWARE

Interner Fehler des Programms.

sysexits.h
71EX_OSERR

Fehler des Betriebssystems, etwa wenn fork nicht möglich ist oder keine Pipe erstellt werden kann.

sysexits.h
72EX_OSFILE

Eine Systemdatei wie /etc/passwd fehlt oder enthält einen Fehler.

sysexits.h
73EX_CANTCREAT

Eine Ausgabedatei kann nicht erstellt werden.

sysexits.h
74EX_IOERR

Ein-/Ausgabefehler beim Lesen oder Schreiben einer Datei.

sysexits.h
75EX_TEMPFAIL

Vorübergehender Fehler: Ein späterer erneuter Versuch ist sinnvoll. Mailserver verwenden ihn, um die Nachricht in der Warteschlange zu behalten.

sysexits.h
76EX_PROTOCOL

Das entfernte System hat etwas geantwortet, das nicht dem Protokoll entspricht.

sysexits.h
77EX_NOPERM

Unzureichende Berechtigungen für die Operation.

sysexits.h
78EX_CONFIG

Die Konfiguration enthält einen Fehler.

sysexits.h
124Timed out

Der Befehl timeout hat ihn beendet, weil er die angegebene Zeit überschritten hat.

GNU timeout
125Container failed to run

docker run selbst ist fehlgeschlagen, bevor der Container ausgeführt wurde, etwa wegen einer falschen Option oder eines Fehlers des Daemons. GNU timeout gibt ihn auch zurück, wenn timeout selbst fehlschlägt.

Docker
126Command invoked cannot execute

Die Datei existiert, kann aber nicht ausgeführt werden: Es fehlt das Ausführungsrecht, es ist ein Verzeichnis oder ein Binary für eine andere Architektur. Bei Docker ist der Befehl des Containers nicht ausführbar.

POSIX
127Command not found

Der Befehl wurde nicht gefunden: Er ist nicht installiert, nicht im PATH oder falsch geschrieben. In Skripten tritt er auch auf, wenn der Interpreter aus der #!-Zeile fehlt; bei Docker, wenn der Befehl des Containers im Image nicht existiert.

POSIX
128Fatal error

Codes über 128 zeigen an, dass ein Signal den Prozess beendet hat, aber 128 entspricht keinem. Git verwendet ihn für alle seine fatalen Fehler („fatal: …“), etwa ein nicht existierendes Repository oder einen Authentifizierungsfehler beim Klonen.

Git
255Exit status out of range

Der Exit-Code lag außerhalb des Bereichs: exit -1 kommt als 255 an, weil nur 8 Bits erhalten bleiben. ssh gibt ihn auch zurück, wenn die Verbindung oder die Authentifizierung fehlschlägt, um ihn vom Code des entfernten Befehls zu unterscheiden.

POSIX

Die Linux-Werte gelten für x86, x86-64 und ARM; Alpha, MIPS, SPARC und PA-RISC nummerieren einige errno und Signale anders. Die englischen Meldungen sind die, die strerror und strsignal in glibc anzeigen, und die von macOS, wenn sie abweichen. Exit-Codes über 128 werden als 128 plus die Signalnummer interpretiert, nach der Konvention von bash, Docker und Kubernetes.

So funktioniert es

Wenn ein Systemaufruf unter Linux fehlschlägt, gibt er -1 zurück und legt in der Variablen errno eine Zahl ab, die den Grund angibt: 2 ist ENOENT, die Datei existiert nicht; 13 ist EACCES, Zugriff verweigert. strerror wandelt diese Zahl in den Text um, den man auf dem Bildschirm sieht, etwa „No such file or directory“. Python zeigt sie als [Errno 13], Node.js als code: 'ECONNREFUSED' und Go, Rust oder Java mit demselben Text. Die Nummern 1 bis 34 stammen aus dem ursprünglichen Unix und sind auf allen Systemen gleich; die folgenden hat jedes System auf eigene Weise nummeriert, deshalb ist ECONNREFUSED unter Linux 111 und unter macOS 61. Der Name ist portabel, die Nummer nicht.

Signale sind Benachrichtigungen, die der Kernel oder ein anderer Prozess an einen Prozess sendet: SIGINT beim Drücken von Ctrl+C, SIGTERM, um ihn zum Beenden aufzufordern, SIGKILL, um ihn ohne Rückfrage zu beenden, SIGSEGV, wenn er auf ungültigen Speicher zugreift. Jedes hat eine Standardaktion, und fast alle lassen sich abfangen, um etwas anderes zu tun. Wenn ein Signal einen Prozess beendet, meldet die Shell als Exit-Code 128 plus die Signalnummer: 137 ist SIGKILL (9), 139 ist SIGSEGV (11) und 143 ist SIGTERM (15). Docker und Kubernetes verwenden dieselbe Konvention.

Der Exit-Code ist die Zahl, die ein Programm beim Beenden hinterlässt: 0 bedeutet Erfolg, jeder andere Wert einen Fehler. Es bleiben nur 8 Bits erhalten, daher reicht er von 0 bis 255. Es gibt nur wenige Konventionen: 126 und 127 verwendet die Shell, wenn sie den Befehl nicht ausführen kann oder nicht findet, 64 bis 78 definiert sysexits.h von BSD, und den Rest legt jedes Programm selbst fest, wie grep, das 1 zurückgibt, wenn es nichts findet.

Beispiele

Last State: Terminated · Reason: OOMKilled · Exit Code: 137137 = 128 + 9 · SIGKILLDer Container hat sein Speicherlimit überschritten, und der Kernel hat ihn mit SIGKILL beendet. Du musst das Limit in resources.limits.memory erhöhen oder herausfinden, warum der Prozess so viel verbraucht; ein Neustart behebt das nicht.
Error: connect ECONNREFUSED 127.0.0.1:5432ECONNREFUSED · Linux 111 · macOS 61 · Connection refusedNode.js konnte keine Verbindung zu PostgreSQL herstellen, weil niemand auf Port 5432 lauscht. Läuft die Anwendung in einem Container, ist 127.0.0.1 der Container selbst und nicht der Host: Verwende den Namen des Datenbankdienstes.
OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 48Die 48 verrät, dass das Programm unter macOS läuft: Unter Linux ist derselbe Fehler die 98. In beiden Fällen verwendet bereits ein anderer Prozess den Port; lsof -i :PORT zeigt, welcher.

Anwendungsfälle

  • Einen Fehler einer Anwendung in Python, Node.js, Go oder C verstehen, die nur die Nummer oder den Namen des errno anzeigt.
  • Anhand des Exit-Codes herausfinden, warum ein Docker-Container beendet wurde oder ein Kubernetes-Pod neu startet.
  • Eine errno-Nummer von macOS dem richtigen Namen zuordnen, die ab 35 nicht mit der von Linux übereinstimmt.
  • Den Exit-Code eines fehlgeschlagenen Skripts, Cronjobs oder CI-Jobs interpretieren.
  • Entscheiden, welches Signal du mit kill sendest, und wissen, was der Prozess tut, wenn er es nicht abfängt.
  • Eine portable Fehlerbehandlung schreiben, die nach Name statt nach Nummer vergleicht.

Häufige Fragen

Was bedeutet der Exit-Code 137?

Dass der Prozess durch das Signal 9, SIGKILL, beendet wurde (128 + 9). Die häufigste Ursache ist der Speicher: Der Container hat sein Limit überschritten, was Kubernetes als OOMKilled meldet, oder der OOM Killer des Kernels hat diesen Prozess ausgewählt, was in dmesg als „Out of memory: Killed process“ erscheint. Es passiert auch bei docker kill oder wenn sich der Prozess nach SIGTERM nicht innerhalb der Frist beendet: 10 Sekunden bei docker stop und 30 bei Kubernetes.

Was ist der Unterschied zwischen SIGTERM und SIGKILL?

SIGTERM fordert den Prozess auf, sich zu beenden, und der Prozess kann es abfangen, um Verbindungen zu schließen, Daten zu speichern und sich zu beenden. Bei SIGKILL beendet der Kernel ihn sofort, ohne dass der Prozess etwas tun kann. Richtig ist, SIGTERM zu senden, einige Sekunden zu warten und nur dann auf SIGKILL zurückzugreifen, wenn er noch läuft; genau das tun systemd, docker stop und Kubernetes.

Warum hat derselbe errno unter macOS eine andere Nummer?

Weil POSIX die Namen definiert, aber nicht die Nummern. Die Nummern 1 bis 34 haben alle Systeme vom ursprünglichen Unix übernommen; danach haben BSD, von dem macOS abstammt, und System V, dem Linux folgte, sie getrennt nummeriert. Deshalb solltest du immer nach Name vergleichen, mit errno.ECONNREFUSED in Python, err.code in Node.js oder der Konstante in C, und nicht nach der Nummer.

Was ist der Unterschied zwischen EACCES und EPERM?

EACCES („Permission denied“) bedeutet, dass die Rechte der Datei oder eines Verzeichnisses im Pfad es nicht erlauben oder dass eine ACL oder SELinux es verhindert: Das löst du mit chmod, chown oder der entsprechenden Richtlinie. EPERM („Operation not permitted“) bedeutet, dass die Operation selbst Privilegien erfordert, unabhängig von den Rechten, etwa den Besitzer einer Datei ändern oder einen Prozess eines anderen Benutzers beenden: Dafür brauchst du root oder eine Capability, oder du musst ein Attribut wie das der Unveränderlichkeit entfernen.

Wie sehe ich den Exit-Code eines Befehls oder eines Containers?

In bash und zsh zeigt echo $? den des letzten Befehls; in PowerShell $LASTEXITCODE. Bei Docker zeigt docker ps -a ihn in der Spalte STATUS an, etwa „Exited (137)“. Bei Kubernetes zeigt kubectl describe pod ihn unter „Last State: Terminated“ an, zusammen mit dem Grund, etwa OOMKilled oder Error.