Codici di errore di Linux
Scopri che cosa significa un errno come ECONNREFUSED o «[Errno 13]», un segnale come SIGKILL o un codice di uscita come 137, con i valori di Linux e di macOS. Incolla il messaggio completo del programma, di Docker o di Kubernetes e lo strumento estrae il codice.
Esempi:

208 di 208 codici

errnoErrori delle chiamate di sistema151
EPERM
Linux 1macOS 1

Operation not permitted

L'operazione richiede privilegi che il processo non ha, come cambiare il proprietario di un file, inviare un segnale a un processo di un altro utente o modificare un file immutabile (chattr +i). A differenza di EACCES, non si risolve cambiando i permessi del file: servono root o la capability corrispondente.

ENOENT
Linux 2macOS 2

No such file or directory

Il file o la directory non esiste. Compare anche quando manca una directory intermedia del percorso, quando un link simbolico punta a una destinazione che non esiste o quando non è installato l'interprete della riga #! di uno script.

ESRCH
Linux 3macOS 3

No such process

Non esiste alcun processo, gruppo di processi o thread con quell'identificatore; per esempio, quando si esegue kill su un PID già terminato.

EINTR
Linux 4macOS 4

Interrupted system call

Un segnale ha interrotto la chiamata di sistema prima che terminasse. Non è un vero errore: il programma deve ritentare la chiamata o installare il gestore del segnale con SA_RESTART.

EIO
Linux 5macOS 5

Input/output error

Errore di input/output di basso livello, in genere durante la lettura o la scrittura sul dispositivo. Sui dischi indica di solito settori danneggiati o un cavo difettoso: controlla dmesg e lo stato SMART. Compare anche quando si scrive su un terminale già chiuso.

ENXIO
Linux 6macOS 6

No such device or address

macOS: Device not configured

Il dispositivo o l'indirizzo non esiste: il file di dispositivo c'è, ma dietro non c'è alcun hardware, oppure è stata aperta in scrittura una FIFO con O_NONBLOCK senza alcun lettore.

E2BIG
Linux 7macOS 7

Argument list too long

L'elenco di argomenti e variabili d'ambiente passato a exec è troppo grande. È il classico «Argument list too long» quando si usa un carattere jolly che si espande in migliaia di file; usa find -exec o xargs.

ENOEXEC
Linux 8macOS 8

Exec format error

Il file non ha un formato eseguibile riconosciuto: è un binario di un'altra architettura, è danneggiato o è uno script senza riga #!.

EBADF
Linux 9macOS 9

Bad file descriptor

Il descrittore di file non è valido, è già stato chiuso o è stato aperto in una modalità che non consente l'operazione, come scrivere su uno aperto in sola lettura.

ECHILD
Linux 10macOS 10

No child processes

Il processo non ha figli da attendere con wait o waitpid, spesso perché SIGCHLD viene ignorato e i figli vengono raccolti automaticamente.

EAGAIN
Linux 11macOS 35

Resource temporarily unavailable

La risorsa non è disponibile al momento ed è meglio riprovare. Nelle operazioni non bloccanti significa che non ci sono ancora dati o spazio; in fork, che è stato raggiunto il limite di processi o thread (ulimit -u o pids.max del cgroup).

Stesso valore:EWOULDBLOCK

ENOMEM
Linux 12macOS 12

Cannot allocate memory

Non c'è memoria sufficiente per l'operazione o è stato superato un limite di memoria del processo. In fork o mmap può dipendere dalla politica di overcommit, dal limite del cgroup o dalla mancanza di spazio di indirizzamento.

EACCES
Linux 13macOS 13

Permission denied

Permesso negato dai permessi del file o di una directory del percorso (serve il permesso di esecuzione su ciascuna), da un'ACL, da SELinux o AppArmor, o da un mount con noexec. Anche bind lo restituisce quando si usa una porta inferiore a 1024 senza privilegi.

EFAULT
Linux 14macOS 14

Bad address

È stato passato a una chiamata di sistema un puntatore a un indirizzo di memoria non valido. Indica un bug nel programma.

ENOTBLK
Linux 15macOS 15

Block device required

L'operazione richiede un dispositivo a blocchi, come un disco, e ha ricevuto un altro tipo di file; per esempio, quando si monta un file normale senza -o loop.

EBUSY
Linux 16macOS 16

Device or resource busy

macOS: Device / Resource busy

Il dispositivo o la risorsa è in uso. È tipico quando si smonta un file system che ha file aperti o un terminale posizionato al suo interno; lsof o fuser mostrano quali processi lo usano.

EEXIST
Linux 17macOS 17

File exists

Esiste già un file, una directory o un altro oggetto con quel nome, per esempio quando si crea con O_EXCL, si usa mkdir senza -p o si crea un link la cui destinazione esiste già.

EXDEV
Linux 18macOS 18

Invalid cross-device link

macOS: Cross-device link

Non si può creare un hard link né rinominare un file tra file system diversi. mv lo risolve copiando ed eliminando; i programmi che usano rename() devono fare lo stesso.

ENODEV
Linux 19macOS 19

No such device

macOS: Operation not supported by device

Il dispositivo non esiste o non supporta l'operazione; per esempio, quando si monta un tipo di file system il cui modulo del kernel non è caricato.

ENOTDIR
Linux 20macOS 20

Not a directory

Un componente del percorso che dovrebbe essere una directory è un file, oppure è stata richiesta una directory (O_DIRECTORY) e non lo è.

EISDIR
Linux 21macOS 21

Is a directory

È stata tentata un'operazione su file su una directory, come aprirla in scrittura.

EINVAL
Linux 22macOS 22

Invalid argument

Un argomento non è valido per la chiamata: un valore fuori intervallo, una combinazione di opzioni incompatibile o un'operazione che l'oggetto non supporta. È generico: la pagina man della chiamata elenca i casi concreti.

ENFILE
Linux 23macOS 23

Too many open files in system

La tabella dei file aperti dell'intero sistema è esaurita. Il limite si regola con fs.file-max in sysctl.

EMFILE
Linux 24macOS 24

Too many open files

Il processo ha raggiunto il suo limite di descrittori aperti («Too many open files»). Alza il limite con ulimit -n o con LimitNOFILE in systemd, e controlla che il programma non lasci file o socket aperti.

ENOTTY
Linux 25macOS 25

Inappropriate ioctl for device

È stata richiesta un'operazione di terminale (ioctl) su qualcosa che non è un terminale, per esempio quando l'output di un programma interattivo viene reindirizzato a un file o a una pipe.

ETXTBSY
Linux 26macOS 26

Text file busy

L'eseguibile è in uso: non si può scrivere in un binario mentre è in esecuzione, né eseguirne uno ancora aperto in scrittura. Per aggiornarlo, conviene scrivere un nuovo file e rinominarlo.

EFBIG
Linux 27macOS 27

File too large

Il file supera la dimensione massima supportata dal file system (4 GB in FAT32) o il limite RLIMIT_FSIZE del processo.

ENOSPC
Linux 28macOS 28

No space left on device

Non c'è più spazio sul dispositivo. Se df mostra spazio libero, controlla gli inode con df -i. Anche inotify lo restituisce quando si esaurisce fs.inotify.max_user_watches.

ESPIPE
Linux 29macOS 29

Illegal seek

Non si può eseguire lseek su una pipe, una FIFO o un socket, perché non hanno una posizione.

EROFS
Linux 30macOS 30

Read-only file system

Il file system è montato in sola lettura. Se è passato in sola lettura senza che nessuno lo chiedesse, è stato il kernel dopo aver rilevato errori: controlla dmesg ed esegui fsck.

EMLINK
Linux 31macOS 31

Too many links

È stato superato il numero massimo di hard link a un file o, in alcuni file system, quello di sottodirectory di una directory.

EPIPE
Linux 32macOS 32

Broken pipe

Si è scritto su una pipe o su un socket la cui altra estremità è già stata chiusa («Broken pipe»). Oltre all'errore, il processo riceve SIGPIPE; è normale quando il lettore termina prima, come in cmd | head.

EDOM
Linux 33macOS 33

Numerical argument out of domain

L'argomento di una funzione matematica è fuori dal suo dominio, come la radice quadrata di un numero negativo.

ERANGE
Linux 34macOS 34

Numerical result out of range

macOS: Result too large

Il risultato di una funzione è troppo grande o troppo piccolo per essere rappresentato, oppure un buffer non basta per il risultato, come in getcwd con un buffer corto.

EDEADLK
Linux 35macOS 11

Resource deadlock avoided

È stato evitato un deadlock: il lock richiesto, come un lock su file con fcntl o un mutex con rilevamento degli errori, sarebbe rimasto in attesa per sempre.

Stesso valore:EDEADLOCK

ENAMETOOLONG
Linux 36macOS 63

File name too long

Il percorso o uno dei suoi componenti supera la lunghezza massima: in Linux, in genere, 255 byte per nome e 4096 per percorso.

ENOLCK
Linux 37macOS 77

No locks available

Non ci sono lock disponibili. Su NFS indica di solito che il servizio di locking (lockd o rpc.statd) non è in funzione.

ENOSYS
Linux 38macOS 78

Function not implemented

La chiamata di sistema non esiste in questo kernel o non è implementata. È tipico dei binari compilati per un kernel più recente o dei profili seccomp dei container che non conoscono le chiamate recenti.

ENOTEMPTY
Linux 39macOS 66

Directory not empty

La directory non è vuota, per esempio quando si usa rmdir o si rinomina sopra una directory esistente. Per eliminarla con il suo contenuto, usa rm -r.

ELOOP
Linux 40macOS 62

Too many levels of symbolic links

Ci sono troppi link simbolici concatenati nella risoluzione del percorso, di solito per un ciclo, oppure è stato usato O_NOFOLLOW su un link simbolico.

ENOMSG
Linux 42macOS 91

No message of desired type

Non c'è alcun messaggio del tipo richiesto nella coda di messaggi System V.

EIDRM
Linux 43macOS 90

Identifier removed

L'identificatore IPC System V (coda, semaforo o memoria condivisa) è stato rimosso mentre il processo lo usava.

ECHRNG
Linux 44macOS —

Channel number out of range

Numero di canale fuori intervallo. È un codice storico senza uso pratico in Linux.

EL2NSYNC
Linux 45macOS —

Level 2 not synchronized

Livello 2 non sincronizzato. È un codice storico di System V senza uso pratico in Linux.

EL3HLT
Linux 46macOS —

Level 3 halted

Livello 3 arrestato. È un codice storico di System V senza uso pratico in Linux.

EL3RST
Linux 47macOS —

Level 3 reset

Livello 3 reimpostato. È un codice storico di System V senza uso pratico in Linux.

ELNRNG
Linux 48macOS —

Link number out of range

Numero di link fuori intervallo. È un codice storico senza uso pratico in Linux.

EUNATCH
Linux 49macOS —

Protocol driver not attached

Il driver del protocollo non è collegato. Lo usano pochi sottosistemi, come alcuni driver Bluetooth.

ENOCSI
Linux 50macOS —

No CSI structure available

Nessuna struttura CSI disponibile. È un codice storico senza uso pratico in Linux.

EL2HLT
Linux 51macOS —

Level 2 halted

Livello 2 arrestato. È un codice storico di System V senza uso pratico in Linux.

EBADE
Linux 52macOS —

Invalid exchange

Scambio non valido. È un codice storico che alcuni driver e file system riutilizzano con un significato proprio.

EBADR
Linux 53macOS —

Invalid request descriptor

Descrittore di richiesta non valido. È un codice storico che alcuni driver riutilizzano con un significato proprio.

EXFULL
Linux 54macOS —

Exchange full

Scambio pieno. È un codice storico senza uso pratico in Linux.

ENOANO
Linux 55macOS —

No anode

Nessun «anode». È un codice storico senza uso pratico in Linux.

EBADRQC
Linux 56macOS —

Invalid request code

Codice di richiesta non valido. È storico; alcuni driver lo usano per i comandi che non supportano.

EBADSLT
Linux 57macOS —

Invalid slot

Slot non valido. È un codice storico senza uso pratico in Linux.

EBFONT
Linux 59macOS —

Bad font file format

Formato di file di font non corretto. È un codice storico senza uso pratico in Linux.

ENOSTR
Linux 60macOS 99

Device not a stream

macOS: Not a STREAM

Il dispositivo non è uno STREAM. Appartiene all'interfaccia STREAMS di System V, che Linux non implementa.

ENODATA
Linux 61macOS 96

No data available

macOS: No message available on STREAM

Nessun dato disponibile. In Linux lo restituisce getxattr quando l'attributo esteso non esiste; in macOS questo caso è ENOATTR.

ETIME
Linux 62macOS 101

Timer expired

macOS: STREAM ioctl timeout

Un timer è scaduto. Proviene da STREAMS; in Linux lo usano alcuni driver e io_uring per le operazioni con timeout.

ENOSR
Linux 63macOS 98

Out of streams resources

macOS: No STREAM resources

Non restano risorse STREAMS, un'interfaccia che Linux non implementa.

ENONET
Linux 64macOS —

Machine is not on the network

La macchina non è in rete. È un codice storico poco usato.

ENOPKG
Linux 65macOS —

Package not installed

Il pacchetto non è installato. È storico; alcuni sottosistemi lo usano quando manca un modulo, per esempio uno crittografico.

EREMOTE
Linux 66macOS 71

Object is remote

macOS: Too many levels of remote in path

L'oggetto è remoto. In NFS indica un percorso esportato da un altro server.

ENOLINK
Linux 67macOS 97

Link has been severed

Il collegamento è stato interrotto. È storico; alcuni driver lo usano quando si perde la connessione con il dispositivo.

EADV
Linux 68macOS —

Advertise error

Errore di «advertise». È un codice storico di RFS senza uso in Linux.

ESRMNT
Linux 69macOS —

Srmount error

Errore di «srmount». È un codice storico di RFS senza uso in Linux.

ECOMM
Linux 70macOS —

Communication error on send

Errore di comunicazione durante l'invio. È storico; lo usano alcuni driver di rete e USB.

EPROTO
Linux 71macOS 100

Protocol error

Errore di protocollo: l'altra estremità o il dispositivo ha risposto qualcosa di inatteso. Compare con i dispositivi USB e nelle connessioni che si interrompono a metà di uno scambio.

EMULTIHOP
Linux 72macOS 95

Multihop attempted

È stato tentato un salto multiplo (multihop). È un codice storico di RFS.

EDOTDOT
Linux 73macOS —

RFS specific error

Errore specifico di RFS. Senza uso in Linux.

EBADMSG
Linux 74macOS 94

Bad message

Il messaggio è malformato o corrotto. ext4, XFS e Btrfs lo restituiscono, con l'alias EFSBADCRC, quando fallisce il checksum dei metadati.

Stesso valore:EFSBADCRC

EOVERFLOW
Linux 75macOS 84

Value too large for defined data type

macOS: Value too large to be stored in data type

Il valore non entra nel tipo di dati di destinazione; per esempio, un programma a 32 bit compilato senza supporto per i file di grandi dimensioni che apre un file di oltre 2 GB.

ENOTUNIQ
Linux 76macOS —

Name not unique on network

Il nome non è univoco sulla rete. È un codice storico.

EBADFD
Linux 77macOS —

File descriptor in bad state

Il descrittore di file è in uno stato non corretto. Lo usano ALSA e alcuni driver quando il dispositivo non è pronto.

EREMCHG
Linux 78macOS —

Remote address changed

L'indirizzo remoto è cambiato. È un codice storico.

ELIBACC
Linux 79macOS —

Can not access a needed shared library

Impossibile accedere a una libreria condivisa necessaria. È un codice storico dei binari a.out.

ELIBBAD
Linux 80macOS —

Accessing a corrupted shared library

La libreria condivisa è danneggiata. È un codice storico dei binari a.out.

ELIBSCN
Linux 81macOS —

.lib section in a.out corrupted

La sezione .lib del binario a.out è danneggiata. È un codice storico.

ELIBMAX
Linux 82macOS —

Attempting to link in too many shared libraries

Si è tentato di collegare troppe librerie condivise. È un codice storico di a.out.

ELIBEXEC
Linux 83macOS —

Cannot exec a shared library directly

Una libreria condivisa non può essere eseguita direttamente. È un codice storico di a.out.

EILSEQ
Linux 84macOS 92

Invalid or incomplete multibyte or wide character

macOS: Illegal byte sequence

La sequenza di byte non è valida per la codifica dei caratteri, come un testo che non è UTF-8 valido quando lo si converte con iconv o con le funzioni multibyte.

ERESTART
Linux 85macOS —

Interrupted system call should be restarted

La chiamata interrotta deve essere riavviata. È di uso interno del kernel e non dovrebbe arrivare ai programmi.

ESTRPIPE
Linux 86macOS —

Streams pipe error

Errore di pipe di STREAMS. ALSA lo restituisce quando il dispositivo audio è sospeso.

EUSERS
Linux 87macOS 68

Too many users

Ci sono troppi utenti. Lo restituisce il sistema delle quote disco quando la sua tabella si riempie, ed è poco comune.

ENOTSOCK
Linux 88macOS 38

Socket operation on non-socket

È stata usata un'operazione su socket su un descrittore che non è un socket.

EDESTADDRREQ
Linux 89macOS 39

Destination address required

Manca l'indirizzo di destinazione: si è inviato tramite un socket senza connessione senza indicare dove.

EMSGSIZE
Linux 90macOS 40

Message too long

Il messaggio è troppo grande per il socket, come un datagramma UDP più grande del massimo o della MTU quando la frammentazione non è consentita.

EPROTOTYPE
Linux 91macOS 41

Protocol wrong type for socket

Il protocollo non corrisponde al tipo di socket.

ENOPROTOOPT
Linux 92macOS 42

Protocol not available

L'opzione di socket o il protocollo richiesto non è disponibile, per esempio un'opzione di setsockopt che il kernel non conosce.

EPROTONOSUPPORT
Linux 93macOS 43

Protocol not supported

Il protocollo non è supportato, per esempio perché il suo modulo del kernel non è caricato.

ESOCKTNOSUPPORT
Linux 94macOS 44

Socket type not supported

Il tipo di socket non è supportato in questa famiglia di indirizzi.

EOPNOTSUPP
Linux 95macOS 102

Operation not supported

macOS: Operation not supported on socket

L'operazione non è supportata dal socket o dall'oggetto. In Linux ha lo stesso valore di ENOTSUP, e molti file system lo restituiscono per le funzioni che non implementano, come fallocate o gli attributi estesi.

ENOTSUP
Linux 95macOS 45

Operation not supported

L'operazione non è supportata. In Linux ha lo stesso valore di EOPNOTSUPP (95); in macOS sono codici distinti.

EPFNOSUPPORT
Linux 96macOS 46

Protocol family not supported

La famiglia di protocolli non è supportata.

EAFNOSUPPORT
Linux 97macOS 47

Address family not supported by protocol

macOS: Address family not supported by protocol family

La famiglia di indirizzi non è supportata; è tipico quando si usa IPv6 su un sistema o un container in cui è disabilitato.

EADDRINUSE
Linux 98macOS 48

Address already in use

L'indirizzo e la porta sono già in uso: un altro processo è in ascolto su quella porta, oppure la connessione precedente è ancora in TIME_WAIT. Trova il processo con ss -ltnp o lsof -i :PORTA, oppure usa SO_REUSEADDR.

EADDRNOTAVAIL
Linux 99macOS 49

Cannot assign requested address

macOS: Can't assign requested address

Impossibile assegnare l'indirizzo richiesto: l'IP non appartiene a nessuna interfaccia della macchina, oppure sono esaurite le porte effimere per le connessioni in uscita.

ENETDOWN
Linux 100macOS 50

Network is down

L'interfaccia di rete non è attiva.

ENETUNREACH
Linux 101macOS 51

Network is unreachable

La rete di destinazione è irraggiungibile perché non esiste alcuna route verso di essa. Controlla la tabella di routing e il gateway; succede anche quando ci si connette tramite IPv6 senza connettività IPv6.

ENETRESET
Linux 102macOS 52

Network dropped connection on reset

La rete ha reimpostato la connessione, per esempio quando fallisce un keepalive.

ECONNABORTED
Linux 103macOS 53

Software caused connection abort

La connessione è stata interrotta sul lato locale, per esempio perché il client l'ha chiusa prima che il server la accettasse con accept.

ECONNRESET
Linux 104macOS 54

Connection reset by peer

L'altra estremità ha chiuso bruscamente la connessione con un RST («Connection reset by peer»): il processo remoto si è chiuso, un firewall o un bilanciatore di carico ha interrotto la connessione inattiva, oppure sono stati inviati dati che l'altra parte non si aspettava.

ENOBUFS
Linux 105macOS 55

No buffer space available

Non c'è spazio di buffer disponibile nel kernel per l'operazione di rete; di solito compare con molto traffico o con le code dei socket piene.

EISCONN
Linux 106macOS 56

Transport endpoint is already connected

macOS: Socket is already connected

Il socket è già connesso.

ENOTCONN
Linux 107macOS 57

Transport endpoint is not connected

macOS: Socket is not connected

Il socket non è connesso: si è tentato di inviare o ricevere prima di connettersi, oppure la connessione è già stata chiusa. In un mount FUSE compare come «Transport endpoint is not connected» quando il suo processo è terminato; si risolve smontando con fusermount -u.

ESHUTDOWN
Linux 108macOS 58

Cannot send after transport endpoint shutdown

macOS: Can't send after socket shutdown

Impossibile inviare dopo aver chiuso quella direzione del socket con shutdown.

ETOOMANYREFS
Linux 109macOS 59

Too many references: cannot splice

macOS: Too many references: can't splice

Ci sono troppi riferimenti; in Linux, quando si passano troppi descrittori annidati tramite un socket Unix.

ETIMEDOUT
Linux 110macOS 60

Connection timed out

macOS: Operation timed out

Il tempo di attesa della connessione è scaduto perché la destinazione non ha risposto. Di solito dipende da un firewall che scarta i pacchetti in silenzio, da un host spento o da una route che non arriva a destinazione.

ECONNREFUSED
Linux 111macOS 61

Connection refused

La destinazione ha rifiutato la connessione: la macchina risponde, ma nessuno è in ascolto su quella porta oppure un firewall risponde con un rifiuto. Verifica che il servizio sia in esecuzione e in ascolto sull'interfaccia corretta, non solo su 127.0.0.1.

EHOSTDOWN
Linux 112macOS 64

Host is down

L'host di destinazione non è attivo.

EHOSTUNREACH
Linux 113macOS 65

No route to host

Non c'è alcuna route verso l'host: non risponde ad ARP nella rete locale, oppure un router o un firewall segnala che è irraggiungibile.

EALREADY
Linux 114macOS 37

Operation already in progress

C'è già un'operazione in corso sul socket, come una connect non bloccante non ancora terminata.

EINPROGRESS
Linux 115macOS 36

Operation now in progress

L'operazione è in corso: una connect non bloccante è iniziata e terminerà più tardi. Non è un errore; bisogna attendere con poll o select.

ESTALE
Linux 116macOS 70

Stale file handle

macOS: Stale NFS file handle

L'handle del file è obsoleto: in NFS, il file o la directory è stato eliminato o sostituito sul server. Si risolve riaprendo il percorso o rimontando.

EUCLEAN
Linux 117macOS —

Structure needs cleaning

La struttura deve essere ripulita: il file system ha rilevato una corruzione (in ext4 e XFS, con l'alias EFSCORRUPTED). Smontalo ed esegui fsck o xfs_repair.

Stesso valore:EFSCORRUPTED

ENOTNAM
Linux 118macOS —

Not a XENIX named type file

Non è un file con nome XENIX. È un codice storico non più usato.

ENAVAIL
Linux 119macOS —

No XENIX semaphores available

Nessun semaforo XENIX disponibile. È un codice storico non più usato.

EISNAM
Linux 120macOS —

Is a named type file

È un file con nome XENIX. È un codice storico non più usato.

EREMOTEIO
Linux 121macOS —

Remote I/O error

Errore di I/O remoto, per esempio di un dispositivo I2C o di un disco remoto che non ha risposto.

EDQUOT
Linux 122macOS 69

Disk quota exceeded

macOS: Disc quota exceeded

È stata superata la quota disco dell'utente o del gruppo.

ENOMEDIUM
Linux 123macOS —

No medium found

Nessun supporto nel dispositivo, come un lettore ottico senza disco o un lettore di schede vuoto.

EMEDIUMTYPE
Linux 124macOS —

Wrong medium type

Il tipo di supporto non è corretto.

ECANCELED
Linux 125macOS 89

Operation canceled

L'operazione è stata annullata, per esempio un I/O asincrono o un'attesa di io_uring.

ENOKEY
Linux 126macOS —

Required key not available

La chiave necessaria non è nel keyring del kernel. Compare con i file system cifrati, come fscrypt o eCryptfs, quando la chiave non è stata caricata.

EKEYEXPIRED
Linux 127macOS —

Key has expired

La chiave è scaduta. Anche PAM e Kerberos lo usano quando sono scaduti la password o il ticket.

EKEYREVOKED
Linux 128macOS —

Key has been revoked

La chiave è stata revocata.

EKEYREJECTED
Linux 129macOS —

Key was rejected by service

Il servizio ha rifiutato la chiave.

EOWNERDEAD
Linux 130macOS 105

Owner died

macOS: Previous owner died

Il proprietario di un mutex robusto è terminato senza rilasciarlo. Il nuovo proprietario deve rendere coerente lo stato protetto e chiamare pthread_mutex_consistent.

ENOTRECOVERABLE
Linux 131macOS 104

State not recoverable

Lo stato protetto da un mutex robusto non può essere recuperato, perché il proprietario precedente è terminato e nessuno lo ha marcato come coerente.

ERFKILL
Linux 132macOS —

Operation not possible due to RF-kill

L'operazione non è possibile perché la radio Wi-Fi o Bluetooth è bloccata da RF-kill. Controlla rfkill list, l'interruttore fisico o il tasto della modalità aereo.

EHWPOISON
Linux 133macOS —

Memory page has hardware error

La pagina di memoria ha un errore hardware e il kernel l'ha marcata come avvelenata.

EFTYPE
Linux 134macOS 79

Inappropriate file type or format

Il tipo di file non è adatto all'operazione. In macOS e BSD esiste da molto tempo; in Linux è stato aggiunto di recente.

EPROCLIM
Linux —macOS 67

Too many processes

Ci sono troppi processi. BSD lo definisce per il limite di processi, anche se in pratica fork restituisce EAGAIN.

EBADRPC
Linux —macOS 72

RPC struct is bad

La struttura RPC non è corretta (Sun RPC, usato da NFS).

ERPCMISMATCH
Linux —macOS 73

RPC version wrong

La versione di RPC non corrisponde (Sun RPC, usato da NFS).

EPROGUNAVAIL
Linux —macOS 74

RPC program not available

macOS: RPC prog. not avail

Il programma RPC non è disponibile sul server.

EPROGMISMATCH
Linux —macOS 75

RPC program version wrong

macOS: Program version wrong

La versione del programma RPC non corrisponde.

EPROCUNAVAIL
Linux —macOS 76

RPC bad procedure for program

macOS: Bad procedure for program

La procedura non esiste nel programma RPC.

EAUTH
Linux —macOS 80

Authentication error

Errore di autenticazione, per esempio durante il mount di una risorsa NFS.

ENEEDAUTH
Linux —macOS 81

Need authenticator

Per l'operazione serve un autenticatore.

EPWROFF
Linux —macOS 82

Device power is off

Il dispositivo è spento.

EDEVERR
Linux —macOS 83

Device error, e.g. paper out

Errore del dispositivo, per esempio una stampante senza carta.

EBADEXEC
Linux —macOS 85

Bad executable

L'eseguibile non è valido.

EBADARCH
Linux —macOS 86

Bad CPU type in executable

L'eseguibile è per un altro tipo di CPU, come un binario solo x86_64 su un Mac con Apple Silicon senza Rosetta 2, o uno ARM su un Mac con Intel.

ESHLIBVERS
Linux —macOS 87

Shared library version mismatch

La versione della libreria condivisa non corrisponde.

EBADMACHO
Linux —macOS 88

Malformed Macho file

Il file Mach-O è malformato o danneggiato.

ENOATTR
Linux —macOS 93

Attribute not found

L'attributo esteso non esiste; equivale all'ENODATA di Linux. Compare con xattr, per esempio quando si rimuove com.apple.quarantine da un file che non lo ha.

ENOPOLICY
Linux —macOS 103

No such policy registered

Nessuna policy registrata con quel nome nel MAC Framework.

EQFULL
Linux —macOS 106

Interface output queue is full

La coda di uscita dell'interfaccia di rete è piena.

ENOTCAPABLE
Linux —macOS 107

Capabilities insufficient

Le capability non sono sufficienti: lo restituiscono le chiamate limitate da una sandbox.

SIGSegnali33
SIGHUP
Linux 1macOS 1

Hangup

Il terminale che controllava il processo è stato chiuso o la sessione SSH si è interrotta. Molti demoni, come nginx, sshd o rsyslog, lo usano come richiesta di rileggere la configurazione; nohup, tmux e screen evitano che chiuda i processi all'uscita.

Termina il processo
SIGINT
Linux 2macOS 2

Interrupt

Interruzione da tastiera con Ctrl+C. Il programma può catturarlo per terminare in modo ordinato. Codice di uscita 130.

Termina il processo
SIGQUIT
Linux 3macOS 3

Quit

Uscita da tastiera con Ctrl+\. Termina il processo con dump della memoria; la JVM, invece, lo usa per stampare lo stato dei thread.

Termina con dump della memoria
SIGILL
Linux 4macOS 4

Illegal instruction

Il processore ha incontrato un'istruzione illegale: un binario compilato per una CPU più recente (per esempio, con AVX2 o AVX-512 su un processore che non le supporta), codice danneggiato o un salto verso dati.

Termina con dump della memoria
SIGTRAP
Linux 5macOS 5

Trace/breakpoint trap

Trap di debug: lo usano i debugger per i punti di interruzione. Se arriva senza debugger, di solito è un errore rilevato dal programma stesso, come i controlli di Swift in macOS.

Termina con dump della memoria
SIGABRT
Linux 6macOS 6

Aborted

Il processo ha chiamato abort(): un'asserzione fallita, un'eccezione C++ non catturata o una corruzione dell'heap rilevata dalla libreria C («double free or corruption»). Codice di uscita 134.

Termina con dump della memoria

Stesso valore:SIGIOT

SIGBUS
Linux 7macOS 10

Bus error

Errore di bus: un accesso a memoria non allineata in alcune architetture, o a una parte di un file mappato con mmap che non esiste più perché il file è stato troncato. Succede anche quando /dev/shm si riempie.

Termina con dump della memoria
SIGFPE
Linux 8macOS 8

Floating point exception

Eccezione aritmetica. Nonostante il nome, la causa più comune è una divisione intera per zero.

Termina con dump della memoria
SIGKILL
Linux 9macOS 9

Killed

Termina il processo immediatamente: non può essere catturato, bloccato né ignorato. Lo inviano kill -9, l'OOM killer del kernel quando la memoria si esaurisce, e Docker o Kubernetes quando un container supera il suo limite di memoria (OOMKilled) o non termina in tempo dopo SIGTERM. Codice di uscita 137.

Termina il processoNon può essere catturato
SIGUSR1
Linux 10macOS 30

User defined signal 1

Segnale libero a cui ogni applicazione dà un proprio uso; per esempio, dd mostra il suo avanzamento e nginx riapre i log.

Termina il processo
SIGSEGV
Linux 11macOS 11

Segmentation fault

Violazione di segmento («Segmentation fault»): un accesso a memoria non valida, come dereferenziare un puntatore nullo, uscire dai limiti di un array o esaurire lo stack con una ricorsione infinita. Codice di uscita 139.

Termina con dump della memoria
SIGUSR2
Linux 12macOS 31

User defined signal 2

Secondo segnale libero a cui ogni applicazione dà un proprio uso.

Termina il processo
SIGPIPE
Linux 13macOS 13

Broken pipe

Scrittura su una pipe o un socket senza lettore. È normale in cmd | head, dove il lettore termina prima; i server di solito lo ignorano e gestiscono l'errore EPIPE. Codice di uscita 141.

Termina il processo
SIGALRM
Linux 14macOS 14

Alarm clock

È scaduto il timer programmato con alarm o setitimer.

Termina il processo
SIGTERM
Linux 15macOS 15

Terminated

Richiesta di terminazione ordinata. È il segnale predefinito di kill, systemctl stop, docker stop e di Kubernetes quando elimina un pod; il processo dovrebbe chiudere le sue connessioni e uscire. Codice di uscita 143.

Termina il processo
SIGSTKFLT
Linux 16macOS —

Stack fault

Errore di stack del coprocessore. Non è usato nel Linux attuale.

Termina il processo
SIGCHLD
Linux 17macOS 20

Child exited

Un processo figlio è terminato, si è fermato o ha ripreso. Il padre deve raccoglierlo con wait; altrimenti il figlio resta come zombie.

Viene ignorato

Stesso valore:SIGCLD

SIGCONT
Linux 18macOS 19

Continued

Riprende un processo fermato, come fanno fg e bg nella shell.

Riprende il processo
SIGSTOP
Linux 19macOS 17

Stopped (signal)

Ferma il processo; non può essere catturato né ignorato. Si riprende con SIGCONT.

Ferma il processoNon può essere catturato
SIGTSTP
Linux 20macOS 18

Stopped

Sospensione dal terminale con Ctrl+Z. A differenza di SIGSTOP, il programma può catturarlo.

Ferma il processo
SIGTTIN
Linux 21macOS 21

Stopped (tty input)

Un processo in background ha tentato di leggere dal terminale.

Ferma il processo
SIGTTOU
Linux 22macOS 22

Stopped (tty output)

Un processo in background ha tentato di scrivere sul terminale con stty tostop attivo, o di modificarne la configurazione.

Ferma il processo
SIGURG
Linux 23macOS 16

Urgent I/O condition

Sono arrivati dati urgenti (fuori banda) su un socket. Go lo usa internamente per interrompere le goroutine.

Viene ignorato
SIGXCPU
Linux 24macOS 24

CPU time limit exceeded

È stato superato il limite di tempo CPU del processo (ulimit -t).

Termina con dump della memoria
SIGXFSZ
Linux 25macOS 25

File size limit exceeded

È stata superata la dimensione massima di file consentita al processo (ulimit -f).

Termina con dump della memoria
SIGVTALRM
Linux 26macOS 26

Virtual timer expired

È scaduto il timer virtuale, che conta solo il tempo CPU del processo.

Termina il processo
SIGPROF
Linux 27macOS 27

Profiling timer expired

È scaduto il timer di profilazione, usato dai profiler.

Termina il processo
SIGWINCH
Linux 28macOS 28

Window changed

È cambiata la dimensione della finestra del terminale; i programmi a schermo intero lo usano per ridisegnarsi.

Viene ignorato
SIGIO
Linux 29macOS 23

input/output possible signal

C'è I/O disponibile su un descrittore configurato con O_ASYNC. In Linux, SIGPOLL è lo stesso segnale.

Termina il processo

Stesso valore:SIGPOLL

SIGPWR
Linux 30macOS —

Power failure

Interruzione dell'alimentazione, che un software UPS segnala al sistema init.

Termina il processo
SIGSYS
Linux 31macOS 12

Bad system call

Chiamata di sistema non valida. Oggi la causa abituale è un filtro seccomp che la blocca, come nei container.

Termina con dump della memoria
SIGEMT
Linux —macOS 7

EMT trap

Trap di emulazione (EMT). Esiste in macOS e BSD, ma non in Linux su x86 né su ARM.

Termina con dump della memoria
SIGINFO
Linux —macOS 29

Information request

Richiesta di informazioni con Ctrl+T nel terminale di macOS e BSD; molti comandi rispondono mostrando il loro avanzamento.

Viene ignorato
$?Codici di uscita24
0EXIT_SUCCESS

Il comando è terminato correttamente. È l'unico codice che indica successo: qualsiasi altro valore indica un errore.

C
1EXIT_FAILURE

Errore generico; ogni programma decide che cosa significa. Il dettaglio di solito è in ciò che il comando ha scritto su stderr. grep e diff lo usano con un altro significato: «nessuna corrispondenza trovata» o «i file sono diversi».

C
2Misuse of shell builtins

Uso errato di un comando interno della shell o errore di sintassi nello script. Molti programmi lo usano anche per opzioni non valide, e grep per errori reali.

Bash
64EX_USAGE

Il comando è stato usato in modo errato: mancano argomenti, ce ne sono troppi o un'opzione non è corretta.

sysexits.h
65EX_DATAERR

I dati di input hanno un formato non corretto.

sysexits.h
66EX_NOINPUT

Un file di input non esiste o non può essere letto.

sysexits.h
67EX_NOUSER

L'utente indicato non esiste; lo usano soprattutto i programmi di posta.

sysexits.h
68EX_NOHOST

Il nome host non esiste.

sysexits.h
69EX_UNAVAILABLE

Un servizio necessario non è disponibile, oppure è fallito qualcosa che non rientra in un'altra categoria.

sysexits.h
70EX_SOFTWARE

Errore interno del programma.

sysexits.h
71EX_OSERR

Errore del sistema operativo, come non riuscire a eseguire fork o a creare una pipe.

sysexits.h
72EX_OSFILE

Manca un file di sistema, come /etc/passwd, oppure contiene un errore.

sysexits.h
73EX_CANTCREAT

Impossibile creare un file di output.

sysexits.h
74EX_IOERR

Errore di input/output durante la lettura o la scrittura di un file.

sysexits.h
75EX_TEMPFAIL

Errore temporaneo: conviene riprovare più tardi. I server di posta lo usano per lasciare il messaggio in coda.

sysexits.h
76EX_PROTOCOL

Il sistema remoto ha risposto qualcosa che non rispetta il protocollo.

sysexits.h
77EX_NOPERM

Permessi insufficienti per l'operazione.

sysexits.h
78EX_CONFIG

C'è un errore nella configurazione.

sysexits.h
124Timed out

Il comando timeout lo ha terminato perché ha superato il tempo indicato.

GNU timeout
125Container failed to run

È fallito docker run stesso prima di eseguire il container, per esempio per un'opzione errata o un errore del daemon. Anche GNU timeout lo restituisce quando a fallire è lui stesso.

Docker
126Command invoked cannot execute

Il file esiste, ma non può essere eseguito: manca il permesso di esecuzione, è una directory o è un binario di un'altra architettura. In Docker, il comando del container non è eseguibile.

POSIX
127Command not found

Comando non trovato: non è installato, non è nel PATH o il nome è scritto male. Negli script compare anche quando manca l'interprete della riga #!; in Docker, quando il comando del container non esiste nell'immagine.

POSIX
128Fatal error

I codici maggiori di 128 indicano che un segnale ha terminato il processo, ma 128 non corrisponde a nessuno. Git lo usa per tutti i suoi errori fatali («fatal: …»), come un repository che non esiste o un errore di autenticazione durante il clone.

Git
255Exit status out of range

Il codice di uscita era fuori intervallo: exit -1 arriva come 255, perché si conservano solo 8 bit. Anche ssh lo restituisce quando fallisce la connessione o l'autenticazione, per distinguerlo dal codice del comando remoto.

POSIX

I valori di Linux sono quelli di x86, x86-64 e ARM; Alpha, MIPS, SPARC e PA-RISC numerano diversamente alcuni errno e segnali. I messaggi in inglese sono quelli mostrati da strerror e strsignal in glibc, e in macOS quando sono diversi. I codici di uscita maggiori di 128 si interpretano come 128 più il numero del segnale, secondo la convenzione di bash, Docker e Kubernetes.

Come funziona

Quando una chiamata di sistema fallisce in Linux, restituisce -1 e lascia nella variabile errno un numero che indica il motivo: 2 è ENOENT, il file non esiste; 13 è EACCES, permesso negato. strerror converte quel numero nel testo che si vede a schermo, come «No such file or directory». Python lo mostra come [Errno 13], Node.js come code: 'ECONNREFUSED' e Go, Rust o Java con lo stesso testo. I numeri da 1 a 34 vengono dallo Unix originale e sono uguali in tutti i sistemi; i successivi li ha numerati ciascun sistema a modo suo, quindi ECONNREFUSED è 111 in Linux e 61 in macOS. Il nome è portabile; il numero no.

I segnali sono notifiche che il kernel o un altro processo inviano a un processo: SIGINT quando si preme Ctrl+C, SIGTERM per chiedergli di terminare, SIGKILL per terminarlo senza chiedere, SIGSEGV quando accede a memoria non valida. Ognuno ha un'azione predefinita, e quasi tutti possono essere catturati per fare altro. Quando un segnale uccide un processo, la shell riporta come codice di uscita 128 più il numero del segnale: 137 è SIGKILL (9), 139 è SIGSEGV (11) e 143 è SIGTERM (15). Docker e Kubernetes usano la stessa convenzione.

Il codice di uscita è il numero che un programma lascia quando termina: 0 significa successo e qualsiasi altro valore errore. Si conservano solo 8 bit, quindi va da 0 a 255. Le convenzioni sono poche: 126 e 127 li usa la shell quando non può eseguire o non trova il comando, da 64 a 78 li definisce sysexits.h di BSD, e il resto lo decide ogni programma, come grep, che restituisce 1 quando non trova nulla.

Esempi

Last State: Terminated · Reason: OOMKilled · Exit Code: 137137 = 128 + 9 · SIGKILLIl container ha superato il suo limite di memoria e il kernel lo ha terminato con SIGKILL. Bisogna alzare il limite in resources.limits.memory o capire perché il processo consuma così tanto; riavviarlo non risolve.
Error: connect ECONNREFUSED 127.0.0.1:5432ECONNREFUSED · Linux 111 · macOS 61 · Connection refusedNode.js non è riuscito a connettersi a PostgreSQL perché nessuno è in ascolto sulla porta 5432. Se l'applicazione gira in un container, 127.0.0.1 è il container stesso e non la macchina: bisogna usare il nome del servizio del database.
OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 48Il 48 rivela che il programma gira su macOS: in Linux lo stesso errore è il 98. In entrambi i casi un altro processo usa già la porta; lsof -i :PORTA mostra quale.

Casi d'uso

  • Capire un errore di un'applicazione in Python, Node.js, Go o C che mostra solo il numero o il nome dell'errno.
  • Scoprire, a partire dal codice di uscita, perché un container Docker si è chiuso o un pod Kubernetes si riavvia.
  • Convertire un numero errno di macOS nel nome corretto, dato che dal 35 in poi non coincide con quello di Linux.
  • Interpretare il codice di uscita di uno script, di un cron o di un job di CI fallito.
  • Scegliere quale segnale inviare con kill e sapere che cosa fa il processo se non lo cattura.
  • Scrivere una gestione degli errori portabile che confronti per nome anziché per numero.

Domande frequenti

Che cosa significa l'exit code 137?

Che il processo è stato terminato dal segnale 9, SIGKILL (128 + 9). La causa più comune è la memoria: il container ha superato il suo limite, e Kubernetes lo riporta come OOMKilled, oppure l'OOM killer del kernel ha scelto quel processo, cosa che resta in dmesg come «Out of memory: Killed process». Succede anche con docker kill, o quando il processo non termina entro il tempo previsto dopo SIGTERM: 10 secondi in docker stop e 30 in Kubernetes.

Che differenza c'è tra SIGTERM e SIGKILL?

SIGTERM chiede al processo di terminare, e il processo può catturarlo per chiudere le connessioni, salvare i dati e uscire. Con SIGKILL è il kernel a terminarlo all'istante, senza che il processo possa fare nulla. La cosa corretta è inviare SIGTERM, attendere qualche secondo e ricorrere a SIGKILL solo se è ancora vivo, che è ciò che fanno systemd, docker stop e Kubernetes.

Perché lo stesso errno ha un altro numero in macOS?

Perché POSIX definisce i nomi ma non i numeri. Da 1 a 34 tutti i sistemi hanno ereditato quelli dello Unix originale; dopo, BSD, da cui deriva macOS, e System V, seguito da Linux, li hanno numerati separatamente. Per questo conviene confrontare sempre per nome, con errno.ECONNREFUSED in Python, err.code in Node.js o la costante in C, e non con il numero.

Che differenza c'è tra EACCES ed EPERM?

EACCES («Permission denied») significa che i permessi del file o di una directory del percorso non lo consentono, oppure lo impedisce un'ACL o SELinux: si risolve con chmod, chown o la policy corrispondente. EPERM («Operation not permitted») significa che l'operazione in sé richiede privilegi, indipendentemente dai permessi, come cambiare il proprietario di un file o terminare un processo di un altro utente: servono root, una capability o la rimozione di un attributo come quello di immutabilità.

Come vedo il codice di uscita di un comando o di un container?

In bash e zsh, echo $? mostra quello dell'ultimo comando; in PowerShell, $LASTEXITCODE. In Docker, docker ps -a lo mostra nella colonna STATUS, come «Exited (137)». In Kubernetes, kubectl describe pod lo mostra in «Last State: Terminated», insieme al motivo, come OOMKilled o Error.