Códigos de erro do Linux
Descubra o que significa um errno como ECONNREFUSED ou “[Errno 13]”, um sinal como SIGKILL ou um código de saída como 137, com os valores do Linux e do macOS. Cole a mensagem completa do programa, do Docker ou do Kubernetes e a ferramenta extrai o código.
Exemplos:

208 de 208 códigos

errnoErros das chamadas de sistema151
EPERM
Linux 1macOS 1

Operation not permitted

A operação requer privilégios que o processo não tem, como mudar o dono de um arquivo, enviar um sinal a um processo de outro usuário ou modificar um arquivo imutável (chattr +i). Diferente de EACCES, não se resolve mudando as permissões do arquivo: é preciso ser root ou ter a capability correspondente.

ENOENT
Linux 2macOS 2

No such file or directory

O arquivo ou diretório não existe. Também aparece quando falta um diretório intermediário do caminho, quando um link simbólico aponta para um destino que não existe ou quando o interpretador da linha #! de um script não está instalado.

ESRCH
Linux 3macOS 3

No such process

Não existe nenhum processo, grupo de processos ou thread com esse identificador; por exemplo, ao executar kill sobre um PID que já terminou.

EINTR
Linux 4macOS 4

Interrupted system call

Um sinal interrompeu a chamada de sistema antes que ela terminasse. Não é um erro de verdade: o programa deve repetir a chamada ou instalar o manipulador do sinal com SA_RESTART.

EIO
Linux 5macOS 5

Input/output error

Erro de entrada/saída de baixo nível, em geral ao ler ou gravar no dispositivo. Em discos, costuma indicar setores danificados ou um cabo com defeito: verifique o dmesg e o status SMART. Também aparece ao escrever em um terminal que já foi fechado.

ENXIO
Linux 6macOS 6

No such device or address

macOS: Device not configured

O dispositivo ou o endereço não existe: o arquivo de dispositivo está lá, mas não há hardware por trás, ou um FIFO foi aberto para escrita com O_NONBLOCK sem nenhum leitor.

E2BIG
Linux 7macOS 7

Argument list too long

A lista de argumentos e variáveis de ambiente passada para exec é grande demais. É o clássico “Argument list too long” ao usar um curinga que se expande para milhares de arquivos; use find -exec ou xargs.

ENOEXEC
Linux 8macOS 8

Exec format error

O arquivo não tem um formato executável reconhecido: é um binário de outra arquitetura, está danificado ou é um script sem linha #!.

EBADF
Linux 9macOS 9

Bad file descriptor

O descritor de arquivo não é válido, já foi fechado ou foi aberto em um modo que não permite a operação, como escrever em um descritor aberto somente para leitura.

ECHILD
Linux 10macOS 10

No child processes

O processo não tem filhos pelos quais esperar com wait ou waitpid, muitas vezes porque SIGCHLD é ignorado e os filhos são recolhidos automaticamente.

EAGAIN
Linux 11macOS 35

Resource temporarily unavailable

O recurso não está disponível no momento e convém tentar de novo. Em operações não bloqueantes, significa que ainda não há dados ou espaço; no fork, que foi atingido o limite de processos ou threads (ulimit -u ou pids.max do cgroup).

Mesmo valor:EWOULDBLOCK

ENOMEM
Linux 12macOS 12

Cannot allocate memory

Não há memória suficiente para a operação ou foi excedido um limite de memória do processo. No fork ou no mmap, pode ser causado pela política de overcommit, pelo limite do cgroup ou pela falta de espaço de endereçamento.

EACCES
Linux 13macOS 13

Permission denied

Permissão negada pelas permissões do arquivo ou de um diretório do caminho (é preciso permissão de execução em cada um), por uma ACL, pelo SELinux ou AppArmor, ou por uma montagem com noexec. O bind também o retorna ao usar uma porta menor que 1024 sem privilégios.

EFAULT
Linux 14macOS 14

Bad address

Foi passado a uma chamada de sistema um ponteiro para um endereço de memória inválido. Indica um bug no programa.

ENOTBLK
Linux 15macOS 15

Block device required

A operação precisa de um dispositivo de blocos, como um disco, e recebeu outro tipo de arquivo; por exemplo, ao montar um arquivo comum sem -o loop.

EBUSY
Linux 16macOS 16

Device or resource busy

macOS: Device / Resource busy

O dispositivo ou o recurso está em uso. É típico ao desmontar um sistema de arquivos que tem arquivos abertos ou um terminal posicionado nele; lsof ou fuser mostram quais processos o usam.

EEXIST
Linux 17macOS 17

File exists

Já existe um arquivo, um diretório ou outro objeto com esse nome, por exemplo ao criar com O_EXCL, ao usar mkdir sem -p ou ao criar um link cujo destino já existe.

EXDEV
Linux 18macOS 18

Invalid cross-device link

macOS: Cross-device link

Não é possível criar um link físico nem renomear um arquivo entre sistemas de arquivos diferentes. O mv resolve isso copiando e apagando; os programas que usam rename() devem fazer o mesmo.

ENODEV
Linux 19macOS 19

No such device

macOS: Operation not supported by device

O dispositivo não existe ou não suporta a operação; por exemplo, ao montar um tipo de sistema de arquivos cujo módulo do kernel não está carregado.

ENOTDIR
Linux 20macOS 20

Not a directory

Um componente do caminho que deveria ser um diretório é um arquivo, ou foi pedido um diretório (O_DIRECTORY) e não é.

EISDIR
Linux 21macOS 21

Is a directory

Foi tentada uma operação de arquivo sobre um diretório, como abri-lo para escrita.

EINVAL
Linux 22macOS 22

Invalid argument

Um argumento não é válido para a chamada: um valor fora do intervalo, uma combinação de opções incompatível ou uma operação que o objeto não suporta. É genérico: a página man da chamada lista os casos concretos.

ENFILE
Linux 23macOS 23

Too many open files in system

A tabela de arquivos abertos de todo o sistema se esgotou. O limite é ajustado com fs.file-max no sysctl.

EMFILE
Linux 24macOS 24

Too many open files

O processo atingiu seu limite de descritores abertos (“Too many open files”). Aumente o limite com ulimit -n ou com LimitNOFILE no systemd, e verifique se o programa não deixa arquivos ou sockets sem fechar.

ENOTTY
Linux 25macOS 25

Inappropriate ioctl for device

Foi pedida uma operação de terminal (ioctl) sobre algo que não é um terminal, por exemplo quando a saída de um programa interativo é redirecionada para um arquivo ou um pipe.

ETXTBSY
Linux 26macOS 26

Text file busy

O executável está em uso: não é possível escrever em um binário enquanto ele é executado, nem executar um que continua aberto para escrita. Para atualizá-lo, convém escrever um arquivo novo e renomeá-lo.

EFBIG
Linux 27macOS 27

File too large

O arquivo excede o tamanho máximo suportado pelo sistema de arquivos (4 GB no FAT32) ou o limite RLIMIT_FSIZE do processo.

ENOSPC
Linux 28macOS 28

No space left on device

Não há espaço livre no dispositivo. Se o df mostrar espaço livre, verifique os inodes com df -i. O inotify também o retorna ao esgotar fs.inotify.max_user_watches.

ESPIPE
Linux 29macOS 29

Illegal seek

Não é possível fazer lseek em um pipe, um FIFO ou um socket, porque eles não têm posição.

EROFS
Linux 30macOS 30

Read-only file system

O sistema de arquivos está montado como somente leitura. Se passou a somente leitura sem que ninguém pedisse, foi o kernel ao detectar erros: verifique o dmesg e execute o fsck.

EMLINK
Linux 31macOS 31

Too many links

Foi excedido o número máximo de links físicos para um arquivo, ou o de subdiretórios de um diretório em alguns sistemas de arquivos.

EPIPE
Linux 32macOS 32

Broken pipe

Houve uma escrita em um pipe ou socket cuja outra ponta já foi fechada (“Broken pipe”). Além do erro, o processo recebe SIGPIPE; é normal quando o leitor termina antes, como em cmd | head.

EDOM
Linux 33macOS 33

Numerical argument out of domain

O argumento de uma função matemática está fora do seu domínio, como a raiz quadrada de um número negativo.

ERANGE
Linux 34macOS 34

Numerical result out of range

macOS: Result too large

O resultado de uma função é grande ou pequeno demais para ser representado, ou um buffer não é suficiente para o resultado, como no getcwd com um buffer curto.

EDEADLK
Linux 35macOS 11

Resource deadlock avoided

Um deadlock foi evitado: o lock pedido, como um bloqueio de arquivo com fcntl ou um mutex com detecção de erros, ficaria esperando para sempre.

Mesmo valor:EDEADLOCK

ENAMETOOLONG
Linux 36macOS 63

File name too long

O caminho ou um de seus componentes excede o comprimento máximo: no Linux, em geral, 255 bytes por nome e 4096 por caminho.

ENOLCK
Linux 37macOS 77

No locks available

Não há locks disponíveis. No NFS, costuma indicar que o serviço de bloqueio (lockd ou rpc.statd) não está funcionando.

ENOSYS
Linux 38macOS 78

Function not implemented

A chamada de sistema não existe neste kernel ou não está implementada. É típico de binários compilados para um kernel mais novo, ou de perfis seccomp de contêineres que não conhecem chamadas recentes.

ENOTEMPTY
Linux 39macOS 66

Directory not empty

O diretório não está vazio, por exemplo ao usar rmdir ou ao renomear sobre um diretório existente. Para apagá-lo com seu conteúdo, use rm -r.

ELOOP
Linux 40macOS 62

Too many levels of symbolic links

Há links simbólicos encadeados demais ao resolver o caminho, normalmente por causa de um ciclo, ou foi usado O_NOFOLLOW sobre um link simbólico.

ENOMSG
Linux 42macOS 91

No message of desired type

Não há nenhuma mensagem do tipo pedido na fila de mensagens do System V.

EIDRM
Linux 43macOS 90

Identifier removed

O identificador de IPC do System V (fila, semáforo ou memória compartilhada) foi removido enquanto o processo o usava.

ECHRNG
Linux 44macOS —

Channel number out of range

Número de canal fora do intervalo. É um código legado sem uso prático no Linux.

EL2NSYNC
Linux 45macOS —

Level 2 not synchronized

Nível 2 não sincronizado. É um código legado do System V sem uso prático no Linux.

EL3HLT
Linux 46macOS —

Level 3 halted

Nível 3 parado. É um código legado do System V sem uso prático no Linux.

EL3RST
Linux 47macOS —

Level 3 reset

Nível 3 reiniciado. É um código legado do System V sem uso prático no Linux.

ELNRNG
Linux 48macOS —

Link number out of range

Número de link fora do intervalo. É um código legado sem uso prático no Linux.

EUNATCH
Linux 49macOS —

Protocol driver not attached

O driver do protocolo não está conectado. Poucos subsistemas o usam, como alguns drivers de Bluetooth.

ENOCSI
Linux 50macOS —

No CSI structure available

Não há nenhuma estrutura CSI disponível. É um código legado sem uso prático no Linux.

EL2HLT
Linux 51macOS —

Level 2 halted

Nível 2 parado. É um código legado do System V sem uso prático no Linux.

EBADE
Linux 52macOS —

Invalid exchange

Troca inválida. É um código legado que alguns drivers e sistemas de arquivos reutilizam com um sentido próprio.

EBADR
Linux 53macOS —

Invalid request descriptor

Descritor de requisição inválido. É um código legado que alguns drivers reutilizam com um sentido próprio.

EXFULL
Linux 54macOS —

Exchange full

Troca cheia. É um código legado sem uso prático no Linux.

ENOANO
Linux 55macOS —

No anode

Não há nenhum “anode”. É um código legado sem uso prático no Linux.

EBADRQC
Linux 56macOS —

Invalid request code

Código de requisição inválido. É legado; alguns drivers o usam para comandos que não suportam.

EBADSLT
Linux 57macOS —

Invalid slot

Slot inválido. É um código legado sem uso prático no Linux.

EBFONT
Linux 59macOS —

Bad font file format

Formato de arquivo de fonte incorreto. É um código legado sem uso prático no Linux.

ENOSTR
Linux 60macOS 99

Device not a stream

macOS: Not a STREAM

O dispositivo não é um STREAM. Pertence à interface STREAMS do System V, que o Linux não implementa.

ENODATA
Linux 61macOS 96

No data available

macOS: No message available on STREAM

Não há dados disponíveis. No Linux, o getxattr o retorna quando o atributo estendido não existe; no macOS, esse caso é ENOATTR.

ETIME
Linux 62macOS 101

Timer expired

macOS: STREAM ioctl timeout

Um temporizador expirou. Vem do STREAMS; no Linux, alguns drivers e o io_uring o usam para operações com tempo limite.

ENOSR
Linux 63macOS 98

Out of streams resources

macOS: No STREAM resources

Não restam recursos de STREAMS, uma interface que o Linux não implementa.

ENONET
Linux 64macOS —

Machine is not on the network

A máquina não está na rede. É um código legado pouco usado.

ENOPKG
Linux 65macOS —

Package not installed

O pacote não está instalado. É legado; alguns subsistemas o usam quando falta um módulo, por exemplo um criptográfico.

EREMOTE
Linux 66macOS 71

Object is remote

macOS: Too many levels of remote in path

O objeto é remoto. No NFS, indica um caminho exportado a partir de outro servidor.

ENOLINK
Linux 67macOS 97

Link has been severed

O link foi cortado. É legado; alguns drivers o usam quando a conexão com o dispositivo é perdida.

EADV
Linux 68macOS —

Advertise error

Erro de “advertise”. É um código legado do RFS sem uso no Linux.

ESRMNT
Linux 69macOS —

Srmount error

Erro de “srmount”. É um código legado do RFS sem uso no Linux.

ECOMM
Linux 70macOS —

Communication error on send

Erro de comunicação ao enviar. É legado; alguns drivers de rede e USB o usam.

EPROTO
Linux 71macOS 100

Protocol error

Erro de protocolo: a outra ponta ou o dispositivo respondeu algo inesperado. Aparece com dispositivos USB e em conexões que caem no meio de uma troca.

EMULTIHOP
Linux 72macOS 95

Multihop attempted

Foi tentado um salto múltiplo (multihop). É um código legado do RFS.

EDOTDOT
Linux 73macOS —

RFS specific error

Erro específico do RFS. Sem uso no Linux.

EBADMSG
Linux 74macOS 94

Bad message

A mensagem está malformada ou corrompida. O ext4, o XFS e o Btrfs o retornam, com o alias EFSBADCRC, quando a soma de verificação dos metadados falha.

Mesmo valor:EFSBADCRC

EOVERFLOW
Linux 75macOS 84

Value too large for defined data type

macOS: Value too large to be stored in data type

O valor não cabe no tipo de dados de destino; por exemplo, um programa de 32 bits compilado sem suporte a arquivos grandes que abre um arquivo de mais de 2 GB.

ENOTUNIQ
Linux 76macOS —

Name not unique on network

O nome não é único na rede. É um código legado.

EBADFD
Linux 77macOS —

File descriptor in bad state

O descritor de arquivo está em um estado incorreto. O ALSA e alguns drivers o usam quando o dispositivo não está preparado.

EREMCHG
Linux 78macOS —

Remote address changed

O endereço remoto mudou. É um código legado.

ELIBACC
Linux 79macOS —

Can not access a needed shared library

Não é possível acessar uma biblioteca compartilhada necessária. É um código legado dos binários a.out.

ELIBBAD
Linux 80macOS —

Accessing a corrupted shared library

A biblioteca compartilhada está danificada. É um código legado dos binários a.out.

ELIBSCN
Linux 81macOS —

.lib section in a.out corrupted

A seção .lib do binário a.out está danificada. É um código legado.

ELIBMAX
Linux 82macOS —

Attempting to link in too many shared libraries

Houve uma tentativa de vincular bibliotecas compartilhadas demais. É um código legado do a.out.

ELIBEXEC
Linux 83macOS —

Cannot exec a shared library directly

Uma biblioteca compartilhada não pode ser executada diretamente. É um código legado do a.out.

EILSEQ
Linux 84macOS 92

Invalid or incomplete multibyte or wide character

macOS: Illegal byte sequence

A sequência de bytes não é válida para a codificação de caracteres, como um texto que não é UTF-8 válido ao convertê-lo com iconv ou com as funções multibyte.

ERESTART
Linux 85macOS —

Interrupted system call should be restarted

A chamada interrompida deve ser reiniciada. É de uso interno do kernel e não deveria chegar aos programas.

ESTRPIPE
Linux 86macOS —

Streams pipe error

Erro de pipe do STREAMS. O ALSA o retorna quando o dispositivo de áudio está suspenso.

EUSERS
Linux 87macOS 68

Too many users

Há usuários demais. O sistema de cotas de disco o retorna quando sua tabela fica cheia, o que é pouco comum.

ENOTSOCK
Linux 88macOS 38

Socket operation on non-socket

Foi usada uma operação de socket sobre um descritor que não é um socket.

EDESTADDRREQ
Linux 89macOS 39

Destination address required

Falta o endereço de destino: algo foi enviado por um socket sem conexão sem indicar para onde.

EMSGSIZE
Linux 90macOS 40

Message too long

A mensagem é grande demais para o socket, como um datagrama UDP maior que o máximo ou que a MTU quando a fragmentação não é permitida.

EPROTOTYPE
Linux 91macOS 41

Protocol wrong type for socket

O protocolo não corresponde ao tipo de socket.

ENOPROTOOPT
Linux 92macOS 42

Protocol not available

A opção de socket ou o protocolo pedido não está disponível, por exemplo uma opção do setsockopt que o kernel não conhece.

EPROTONOSUPPORT
Linux 93macOS 43

Protocol not supported

O protocolo não é suportado, por exemplo porque seu módulo do kernel não está carregado.

ESOCKTNOSUPPORT
Linux 94macOS 44

Socket type not supported

O tipo de socket não é suportado nessa família de endereços.

EOPNOTSUPP
Linux 95macOS 102

Operation not supported

macOS: Operation not supported on socket

A operação não é suportada pelo socket ou pelo objeto. No Linux, tem o mesmo valor que ENOTSUP, e muitos sistemas de arquivos o retornam para funções que não implementam, como fallocate ou os atributos estendidos.

ENOTSUP
Linux 95macOS 45

Operation not supported

A operação não é suportada. No Linux, tem o mesmo valor que EOPNOTSUPP (95); no macOS, são códigos diferentes.

EPFNOSUPPORT
Linux 96macOS 46

Protocol family not supported

A família de protocolos não é suportada.

EAFNOSUPPORT
Linux 97macOS 47

Address family not supported by protocol

macOS: Address family not supported by protocol family

A família de endereços não é suportada; é típico ao usar IPv6 em um sistema ou contêiner que o tem desabilitado.

EADDRINUSE
Linux 98macOS 48

Address already in use

O endereço e a porta já estão em uso: outro processo escuta nessa porta, ou a conexão anterior continua em TIME_WAIT. Encontre o processo com ss -ltnp ou lsof -i :PORTA, ou use SO_REUSEADDR.

EADDRNOTAVAIL
Linux 99macOS 49

Cannot assign requested address

macOS: Can't assign requested address

Não é possível atribuir o endereço pedido: o IP não pertence a nenhuma interface da máquina, ou as portas efêmeras para conexões de saída se esgotaram.

ENETDOWN
Linux 100macOS 50

Network is down

A interface de rede está inativa.

ENETUNREACH
Linux 101macOS 51

Network is unreachable

A rede de destino é inalcançável porque não há nenhuma rota para ela. Verifique a tabela de rotas e o gateway; também acontece ao conectar por IPv6 sem conectividade IPv6.

ENETRESET
Linux 102macOS 52

Network dropped connection on reset

A rede reiniciou a conexão, por exemplo quando um keepalive falha.

ECONNABORTED
Linux 103macOS 53

Software caused connection abort

A conexão foi abortada do lado local, por exemplo porque o cliente a fechou antes que o servidor a aceitasse com accept.

ECONNRESET
Linux 104macOS 54

Connection reset by peer

A outra ponta cortou a conexão abruptamente com um RST (“Connection reset by peer”): o processo remoto foi encerrado, um firewall ou um balanceador de carga cortou a conexão inativa, ou foram enviados dados que o outro lado não esperava.

ENOBUFS
Linux 105macOS 55

No buffer space available

Não há espaço de buffer disponível no kernel para a operação de rede; costuma aparecer com muito tráfego ou com as filas dos sockets cheias.

EISCONN
Linux 106macOS 56

Transport endpoint is already connected

macOS: Socket is already connected

O socket já está conectado.

ENOTCONN
Linux 107macOS 57

Transport endpoint is not connected

macOS: Socket is not connected

O socket não está conectado: tentou-se enviar ou receber antes de conectar, ou a conexão já foi fechada. Em uma montagem FUSE, aparece como “Transport endpoint is not connected” quando seu processo morreu; resolve-se desmontando com fusermount -u.

ESHUTDOWN
Linux 108macOS 58

Cannot send after transport endpoint shutdown

macOS: Can't send after socket shutdown

Não é possível enviar depois de fechar esse sentido do socket com shutdown.

ETOOMANYREFS
Linux 109macOS 59

Too many references: cannot splice

macOS: Too many references: can't splice

Há referências demais; no Linux, ao passar descritores aninhados demais por um socket Unix.

ETIMEDOUT
Linux 110macOS 60

Connection timed out

macOS: Operation timed out

O tempo de espera da conexão se esgotou porque o destino não respondeu. Costuma ser causado por um firewall que descarta os pacotes silenciosamente, por um host desligado ou por uma rota que não chega ao destino.

ECONNREFUSED
Linux 111macOS 61

Connection refused

O destino recusou a conexão: a máquina responde, mas ninguém escuta nessa porta ou um firewall responde com uma rejeição. Verifique se o serviço está rodando e escutando na interface correta, não apenas em 127.0.0.1.

EHOSTDOWN
Linux 112macOS 64

Host is down

O host de destino está fora do ar.

EHOSTUNREACH
Linux 113macOS 65

No route to host

Não há rota para o host: ele não responde a ARP na rede local, ou um roteador ou firewall informa que ele é inalcançável.

EALREADY
Linux 114macOS 37

Operation already in progress

Já há uma operação em andamento no socket, como um connect não bloqueante que ainda não terminou.

EINPROGRESS
Linux 115macOS 36

Operation now in progress

A operação está em andamento: um connect não bloqueante começou e terminará mais tarde. Não é um erro; é preciso esperar com poll ou select.

ESTALE
Linux 116macOS 70

Stale file handle

macOS: Stale NFS file handle

O identificador de arquivo ficou obsoleto: no NFS, o arquivo ou o diretório foi apagado ou substituído no servidor. Resolve-se abrindo o caminho novamente ou remontando.

EUCLEAN
Linux 117macOS —

Structure needs cleaning

A estrutura precisa de limpeza: o sistema de arquivos detectou corrupção (no ext4 e no XFS, com o alias EFSCORRUPTED). Desmonte-o e execute fsck ou xfs_repair.

Mesmo valor:EFSCORRUPTED

ENOTNAM
Linux 118macOS —

Not a XENIX named type file

Não é um arquivo nomeado do XENIX. É um código legado sem uso.

ENAVAIL
Linux 119macOS —

No XENIX semaphores available

Não há semáforos do XENIX disponíveis. É um código legado sem uso.

EISNAM
Linux 120macOS —

Is a named type file

É um arquivo nomeado do XENIX. É um código legado sem uso.

EREMOTEIO
Linux 121macOS —

Remote I/O error

Erro de E/S remota, por exemplo de um dispositivo I2C ou de um disco remoto que não respondeu.

EDQUOT
Linux 122macOS 69

Disk quota exceeded

macOS: Disc quota exceeded

A cota de disco do usuário ou do grupo foi excedida.

ENOMEDIUM
Linux 123macOS —

No medium found

Não há nenhuma mídia no dispositivo, como uma unidade óptica sem disco ou um leitor de cartões vazio.

EMEDIUMTYPE
Linux 124macOS —

Wrong medium type

O tipo de mídia não é o correto.

ECANCELED
Linux 125macOS 89

Operation canceled

A operação foi cancelada, por exemplo uma E/S assíncrona ou uma espera do io_uring.

ENOKEY
Linux 126macOS —

Required key not available

A chave necessária não está no keyring do kernel. Aparece com sistemas de arquivos criptografados, como fscrypt ou eCryptfs, quando a chave não foi carregada.

EKEYEXPIRED
Linux 127macOS —

Key has expired

A chave expirou. O PAM e o Kerberos também o usam quando a senha ou o ticket expirou.

EKEYREVOKED
Linux 128macOS —

Key has been revoked

A chave foi revogada.

EKEYREJECTED
Linux 129macOS —

Key was rejected by service

O serviço rejeitou a chave.

EOWNERDEAD
Linux 130macOS 105

Owner died

macOS: Previous owner died

O dono de um mutex robusto morreu sem liberá-lo. O novo dono deve deixar consistente o estado protegido e chamar pthread_mutex_consistent.

ENOTRECOVERABLE
Linux 131macOS 104

State not recoverable

O estado protegido por um mutex robusto não pode ser recuperado, porque o dono anterior morreu e ninguém o marcou como consistente.

ERFKILL
Linux 132macOS —

Operation not possible due to RF-kill

A operação não é possível porque o rádio Wi-Fi ou Bluetooth está bloqueado pelo RF-kill. Verifique rfkill list, a chave física ou a tecla de modo avião.

EHWPOISON
Linux 133macOS —

Memory page has hardware error

A página de memória tem um erro de hardware e o kernel a marcou como envenenada.

EFTYPE
Linux 134macOS 79

Inappropriate file type or format

O tipo de arquivo não é adequado para a operação. No macOS e no BSD existe há muito tempo; no Linux, foi adicionado recentemente.

EPROCLIM
Linux —macOS 67

Too many processes

Há processos demais. O BSD o define para o limite de processos, embora na prática o fork retorne EAGAIN.

EBADRPC
Linux —macOS 72

RPC struct is bad

A estrutura de RPC está incorreta (Sun RPC, usado pelo NFS).

ERPCMISMATCH
Linux —macOS 73

RPC version wrong

A versão de RPC não corresponde (Sun RPC, usado pelo NFS).

EPROGUNAVAIL
Linux —macOS 74

RPC program not available

macOS: RPC prog. not avail

O programa RPC não está disponível no servidor.

EPROGMISMATCH
Linux —macOS 75

RPC program version wrong

macOS: Program version wrong

A versão do programa RPC não corresponde.

EPROCUNAVAIL
Linux —macOS 76

RPC bad procedure for program

macOS: Bad procedure for program

O procedimento não existe no programa RPC.

EAUTH
Linux —macOS 80

Authentication error

Erro de autenticação, por exemplo ao montar um compartilhamento NFS.

ENEEDAUTH
Linux —macOS 81

Need authenticator

É necessário um autenticador para a operação.

EPWROFF
Linux —macOS 82

Device power is off

O dispositivo está desligado.

EDEVERR
Linux —macOS 83

Device error, e.g. paper out

Erro do dispositivo, por exemplo uma impressora sem papel.

EBADEXEC
Linux —macOS 85

Bad executable

O executável não é válido.

EBADARCH
Linux —macOS 86

Bad CPU type in executable

O executável é para outro tipo de CPU, como um binário somente x86_64 em um Mac com Apple Silicon sem o Rosetta 2, ou um ARM em um Mac com Intel.

ESHLIBVERS
Linux —macOS 87

Shared library version mismatch

A versão da biblioteca compartilhada não corresponde.

EBADMACHO
Linux —macOS 88

Malformed Macho file

O arquivo Mach-O está malformado ou danificado.

ENOATTR
Linux —macOS 93

Attribute not found

O atributo estendido não existe; equivale ao ENODATA do Linux. Aparece com xattr, por exemplo ao remover com.apple.quarantine de um arquivo que não o tem.

ENOPOLICY
Linux —macOS 103

No such policy registered

Não há nenhuma política registrada com esse nome no MAC Framework.

EQFULL
Linux —macOS 106

Interface output queue is full

A fila de saída da interface de rede está cheia.

ENOTCAPABLE
Linux —macOS 107

Capabilities insufficient

As capacidades não são suficientes: é retornado pelas chamadas restringidas por um sandbox.

SIGSinais33
SIGHUP
Linux 1macOS 1

Hangup

O terminal que controlava o processo foi fechado ou a sessão SSH caiu. Muitos daemons, como nginx, sshd ou rsyslog, o usam como pedido para reler a configuração; nohup, tmux e screen evitam que ele encerre os processos ao sair.

Encerra o processo
SIGINT
Linux 2macOS 2

Interrupt

Interrupção pelo teclado com Ctrl+C. O programa pode capturá-lo para terminar de forma ordenada. Código de saída 130.

Encerra o processo
SIGQUIT
Linux 3macOS 3

Quit

Saída pelo teclado com Ctrl+\. Encerra o processo com despejo de memória; a JVM, por outro lado, o usa para imprimir o estado das threads.

Encerra com despejo de memória
SIGILL
Linux 4macOS 4

Illegal instruction

O processador encontrou uma instrução ilegal: um binário compilado para uma CPU mais nova (por exemplo, com AVX2 ou AVX-512 em um processador que não os tem), código danificado ou um salto para dados.

Encerra com despejo de memória
SIGTRAP
Linux 5macOS 5

Trace/breakpoint trap

Trap de depuração: os depuradores o usam para os breakpoints. Se chegar sem um depurador, costuma ser uma falha detectada pelo próprio programa, como as verificações do Swift no macOS.

Encerra com despejo de memória
SIGABRT
Linux 6macOS 6

Aborted

O processo chamou abort(): uma asserção que falhou, uma exceção de C++ não capturada ou uma corrupção do heap detectada pela biblioteca C (“double free or corruption”). Código de saída 134.

Encerra com despejo de memória

Mesmo valor:SIGIOT

SIGBUS
Linux 7macOS 10

Bus error

Erro de barramento: um acesso a memória desalinhada em algumas arquiteturas, ou a uma parte de um arquivo mapeado com mmap que já não existe porque o arquivo foi truncado. Também acontece quando /dev/shm fica cheio.

Encerra com despejo de memória
SIGFPE
Linux 8macOS 8

Floating point exception

Exceção aritmética. Apesar do nome, a causa mais comum é uma divisão inteira por zero.

Encerra com despejo de memória
SIGKILL
Linux 9macOS 9

Killed

Encerra o processo imediatamente: não pode ser capturado, bloqueado nem ignorado. É enviado por kill -9, pelo OOM killer do kernel quando a memória se esgota, e pelo Docker ou Kubernetes quando um contêiner excede seu limite de memória (OOMKilled) ou não termina a tempo depois de SIGTERM. Código de saída 137.

Encerra o processoNão pode ser capturado
SIGUSR1
Linux 10macOS 30

User defined signal 1

Sinal livre para que cada aplicação lhe dê seu próprio uso; por exemplo, o dd informa seu progresso e o nginx reabre os logs.

Encerra o processo
SIGSEGV
Linux 11macOS 11

Segmentation fault

Violação de segmento (“Segmentation fault”): um acesso a memória inválida, como desreferenciar um ponteiro nulo, sair dos limites de um array ou estourar a pilha com uma recursão infinita. Código de saída 139.

Encerra com despejo de memória
SIGUSR2
Linux 12macOS 31

User defined signal 2

Segundo sinal livre para que cada aplicação lhe dê seu próprio uso.

Encerra o processo
SIGPIPE
Linux 13macOS 13

Broken pipe

Escrita em um pipe ou socket sem leitor. É normal em cmd | head, onde o leitor termina antes; os servidores costumam ignorá-lo e tratar o erro EPIPE. Código de saída 141.

Encerra o processo
SIGALRM
Linux 14macOS 14

Alarm clock

O temporizador programado com alarm ou setitimer expirou.

Encerra o processo
SIGTERM
Linux 15macOS 15

Terminated

Pedido de encerramento ordenado. É o sinal padrão do kill, do systemctl stop, do docker stop e do Kubernetes ao excluir um pod; o processo deveria fechar suas conexões e sair. Código de saída 143.

Encerra o processo
SIGSTKFLT
Linux 16macOS —

Stack fault

Falha de pilha do coprocessador. Não é usado no Linux atual.

Encerra o processo
SIGCHLD
Linux 17macOS 20

Child exited

Um processo filho terminou, foi suspenso ou foi retomado. O pai deve recolhê-lo com wait; se não o fizer, o filho fica como zumbi.

É ignorado

Mesmo valor:SIGCLD

SIGCONT
Linux 18macOS 19

Continued

Retoma um processo suspenso, como fazem fg e bg no shell.

Retoma o processo
SIGSTOP
Linux 19macOS 17

Stopped (signal)

Suspende o processo; não pode ser capturado nem ignorado. O processo é retomado com SIGCONT.

Suspende o processoNão pode ser capturado
SIGTSTP
Linux 20macOS 18

Stopped

Suspensão a partir do terminal com Ctrl+Z. Diferente de SIGSTOP, o programa pode capturá-lo.

Suspende o processo
SIGTTIN
Linux 21macOS 21

Stopped (tty input)

Um processo em segundo plano tentou ler do terminal.

Suspende o processo
SIGTTOU
Linux 22macOS 22

Stopped (tty output)

Um processo em segundo plano tentou escrever no terminal com stty tostop ativo, ou alterar a configuração do terminal.

Suspende o processo
SIGURG
Linux 23macOS 16

Urgent I/O condition

Chegaram dados urgentes (fora de banda) a um socket. O Go o usa internamente para interromper goroutines.

É ignorado
SIGXCPU
Linux 24macOS 24

CPU time limit exceeded

O limite de tempo de CPU do processo foi excedido (ulimit -t).

Encerra com despejo de memória
SIGXFSZ
Linux 25macOS 25

File size limit exceeded

O tamanho máximo de arquivo permitido ao processo foi excedido (ulimit -f).

Encerra com despejo de memória
SIGVTALRM
Linux 26macOS 26

Virtual timer expired

O temporizador virtual, que conta apenas o tempo de CPU do processo, expirou.

Encerra o processo
SIGPROF
Linux 27macOS 27

Profiling timer expired

O temporizador de profiling, usado pelos profilers, expirou.

Encerra o processo
SIGWINCH
Linux 28macOS 28

Window changed

O tamanho da janela do terminal mudou; os programas de tela cheia o usam para se redesenhar.

É ignorado
SIGIO
Linux 29macOS 23

input/output possible signal

Há E/S disponível em um descritor configurado com O_ASYNC. No Linux, SIGPOLL é o mesmo sinal.

Encerra o processo

Mesmo valor:SIGPOLL

SIGPWR
Linux 30macOS —

Power failure

Falha de energia, que um software de nobreak (UPS) informa ao sistema init.

Encerra o processo
SIGSYS
Linux 31macOS 12

Bad system call

Chamada de sistema incorreta. Hoje a causa habitual é um filtro seccomp que a bloqueia, como nos contêineres.

Encerra com despejo de memória
SIGEMT
Linux —macOS 7

EMT trap

Trap de emulação (EMT). Existe no macOS e no BSD, mas não no Linux em x86 nem em ARM.

Encerra com despejo de memória
SIGINFO
Linux —macOS 29

Information request

Pedido de informação com Ctrl+T no terminal do macOS e do BSD; muitos comandos respondem mostrando seu progresso.

É ignorado
$?Códigos de saída24
0EXIT_SUCCESS

O comando terminou com sucesso. É o único código que significa sucesso: qualquer outro valor indica um erro.

C
1EXIT_FAILURE

Erro geral; cada programa decide o que significa. O detalhe costuma estar no que o comando escreveu no stderr. grep e diff o usam com outro sentido: “não encontrou correspondências” ou “os arquivos são diferentes”.

C
2Misuse of shell builtins

Uso incorreto de um comando interno do shell ou erro de sintaxe no script. Muitos programas também o usam para opções inválidas, e o grep para erros reais.

Bash
64EX_USAGE

O comando foi usado incorretamente: faltam argumentos, sobram argumentos ou alguma opção está incorreta.

sysexits.h
65EX_DATAERR

Os dados de entrada têm um formato incorreto.

sysexits.h
66EX_NOINPUT

Um arquivo de entrada não existe ou não pode ser lido.

sysexits.h
67EX_NOUSER

O usuário indicado não existe; é usado sobretudo pelos programas de e-mail.

sysexits.h
68EX_NOHOST

O nome do host não existe.

sysexits.h
69EX_UNAVAILABLE

Um serviço necessário não está disponível, ou falhou algo que não se encaixa em outra categoria.

sysexits.h
70EX_SOFTWARE

Erro interno do programa.

sysexits.h
71EX_OSERR

Erro do sistema operacional, como não conseguir fazer fork ou criar um pipe.

sysexits.h
72EX_OSFILE

Falta um arquivo do sistema, como /etc/passwd, ou ele tem um erro.

sysexits.h
73EX_CANTCREAT

Não é possível criar um arquivo de saída.

sysexits.h
74EX_IOERR

Erro de entrada/saída ao ler ou gravar um arquivo.

sysexits.h
75EX_TEMPFAIL

Falha temporária: convém tentar novamente mais tarde. Os servidores de e-mail o usam para deixar a mensagem na fila.

sysexits.h
76EX_PROTOCOL

O sistema remoto respondeu algo que não respeita o protocolo.

sysexits.h
77EX_NOPERM

Permissões insuficientes para a operação.

sysexits.h
78EX_CONFIG

Há um erro na configuração.

sysexits.h
124Timed out

O comando timeout o encerrou porque ele excedeu o tempo indicado.

GNU timeout
125Container failed to run

O próprio docker run falhou antes de executar o contêiner, por exemplo por uma opção incorreta ou um erro do daemon. O GNU timeout também o retorna quando quem falha é ele.

Docker
126Command invoked cannot execute

O arquivo existe, mas não pode ser executado: falta a permissão de execução, é um diretório ou é um binário de outra arquitetura. No Docker, o comando do contêiner não é executável.

POSIX
127Command not found

O comando não foi encontrado: não está instalado, não está no PATH ou o nome está escrito errado. Em scripts, também aparece quando falta o interpretador da linha #!; no Docker, quando o comando do contêiner não existe na imagem.

POSIX
128Fatal error

Os códigos maiores que 128 indicam que um sinal encerrou o processo, mas 128 não corresponde a nenhum. O Git o usa para todos os seus erros fatais (“fatal: …”), como um repositório que não existe ou uma falha de autenticação ao clonar.

Git
255Exit status out of range

O código de saída ficou fora do intervalo: exit -1 chega como 255, porque só são conservados 8 bits. O ssh também o retorna quando a conexão ou a autenticação falha, para diferenciá-lo do código do comando remoto.

POSIX

Os valores do Linux são os de x86, x86-64 e ARM; Alpha, MIPS, SPARC e PA-RISC numeram alguns errno e sinais de forma diferente. As mensagens em inglês são as que strerror e strsignal mostram na glibc, e no macOS quando são diferentes. Os códigos de saída maiores que 128 são interpretados como 128 mais o número do sinal, que é a convenção do bash, do Docker e do Kubernetes.

Como funciona

Quando uma chamada de sistema falha no Linux, ela retorna -1 e deixa na variável errno um número que diz o motivo: 2 é ENOENT, o arquivo não existe; 13 é EACCES, permissão negada. O strerror converte esse número no texto que aparece na tela, como “No such file or directory”. O Python o mostra como [Errno 13], o Node.js como code: 'ECONNREFUSED', e Go, Rust ou Java com o mesmo texto. Os números de 1 a 34 vêm do Unix original e são iguais em todos os sistemas; os seguintes foram numerados por cada sistema à sua maneira, por isso ECONNREFUSED é 111 no Linux e 61 no macOS. O nome é portável; o número, não.

Os sinais são avisos que o kernel ou outro processo enviam a um processo: SIGINT quando se pressiona Ctrl+C, SIGTERM para pedir que ele termine, SIGKILL para encerrá-lo sem perguntar, SIGSEGV quando ele acessa memória inválida. Cada um tem uma ação padrão, e quase todos podem ser capturados para fazer outra coisa. Quando um sinal mata um processo, o shell informa como código de saída 128 mais o número do sinal: 137 é SIGKILL (9), 139 é SIGSEGV (11) e 143 é SIGTERM (15). O Docker e o Kubernetes usam a mesma convenção.

O código de saída é o número que um programa deixa ao terminar: 0 significa sucesso e qualquer outro valor, erro. Só são conservados 8 bits, então ele vai de 0 a 255. Há poucas convenções: 126 e 127 são usados pelo shell quando não consegue executar ou não encontra o comando, de 64 a 78 são definidos pelo sysexits.h do BSD, e o resto é decidido por cada programa, como o grep, que retorna 1 quando não encontra nada.

Exemplos

Last State: Terminated · Reason: OOMKilled · Exit Code: 137137 = 128 + 9 · SIGKILLO contêiner excedeu seu limite de memória e o kernel o matou com SIGKILL. É preciso aumentar o limite em resources.limits.memory ou descobrir por que o processo consome tanto; reiniciá-lo não resolve.
Error: connect ECONNREFUSED 127.0.0.1:5432ECONNREFUSED · Linux 111 · macOS 61 · Connection refusedO Node.js não conseguiu se conectar ao PostgreSQL porque ninguém escuta na porta 5432. Se a aplicação roda em um contêiner, 127.0.0.1 é o próprio contêiner e não a máquina: é preciso usar o nome do serviço do banco de dados.
OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 48O 48 revela que o programa roda no macOS: no Linux, o mesmo erro é o 98. Em ambos os casos, outro processo já usa a porta; lsof -i :PORTA mostra qual.

Casos de uso

  • Entender um erro de uma aplicação em Python, Node.js, Go ou C que só mostra o número ou o nome do errno.
  • Descobrir, a partir do código de saída, por que um contêiner do Docker foi encerrado ou um pod do Kubernetes reinicia.
  • Converter um número de errno do macOS no nome correto, que a partir do 35 não coincide com o do Linux.
  • Interpretar o código de saída de um script, um cron ou um job de CI que falhou.
  • Escolher qual sinal enviar com kill e saber o que o processo faz se não o capturar.
  • Escrever um tratamento de erros portável que compare por nome em vez de por número.

Perguntas frequentes

O que significa o exit code 137?

Que o processo foi encerrado pelo sinal 9, SIGKILL (128 + 9). A causa mais comum é a memória: o contêiner excedeu seu limite, e o Kubernetes informa isso como OOMKilled, ou o OOM killer do kernel escolheu esse processo, o que fica registrado no dmesg como “Out of memory: Killed process”. Também acontece com docker kill, ou quando o processo não termina dentro do prazo depois de SIGTERM: 10 segundos no docker stop e 30 no Kubernetes.

Qual é a diferença entre SIGTERM e SIGKILL?

SIGTERM pede ao processo que termine, e o processo pode capturá-lo para fechar conexões, salvar dados e sair. Com SIGKILL, o kernel o encerra na hora, sem que o processo possa fazer nada. O correto é enviar SIGTERM, esperar alguns segundos e recorrer a SIGKILL só se ele continuar vivo, que é o que fazem o systemd, o docker stop e o Kubernetes.

Por que o mesmo errno tem outro número no macOS?

Porque o POSIX define os nomes, mas não os números. De 1 a 34, todos os sistemas herdaram os do Unix original; depois, o BSD, do qual vem o macOS, e o System V, que o Linux seguiu, os numeraram separadamente. Por isso convém comparar sempre pelo nome, com errno.ECONNREFUSED no Python, err.code no Node.js ou a constante em C, e não pelo número.

Qual é a diferença entre EACCES e EPERM?

EACCES (“Permission denied”) significa que as permissões do arquivo ou de algum diretório do caminho não o permitem, ou que uma ACL ou o SELinux o impedem: resolve-se com chmod, chown ou a política correspondente. EPERM (“Operation not permitted”) significa que a própria operação requer privilégios, independentemente das permissões, como mudar o dono de um arquivo ou matar um processo de outro usuário: é preciso ser root, ter uma capability ou remover um atributo como o de imutável.

Como vejo o código de saída de um comando ou de um contêiner?

No bash e no zsh, echo $? mostra o do último comando; no PowerShell, $LASTEXITCODE. No Docker, docker ps -a o mostra na coluna STATUS, como “Exited (137)”. No Kubernetes, kubectl describe pod o mostra em “Last State: Terminated”, junto com o motivo, como OOMKilled ou Error.