Коды ошибок Linux
Узнайте, что означает errno вроде ECONNREFUSED или «[Errno 13]», сигнал вроде SIGKILL или код завершения вроде 137, со значениями для Linux и macOS. Вставьте полное сообщение программы, Docker или Kubernetes, и инструмент сам извлечёт из него код.
Примеры:

Кодов: 208 из 208

errnoОшибки системных вызовов151
EPERM
Linux 1macOS 1

Operation not permitted

Операция требует привилегий, которых у процесса нет: например, сменить владельца файла, отправить сигнал процессу другого пользователя или изменить неизменяемый файл (chattr +i). В отличие от EACCES, это не решается изменением прав на файл: нужен root или соответствующая capability.

ENOENT
Linux 2macOS 2

No such file or directory

Файл или каталог не существует. Ошибка также возникает, когда в пути отсутствует промежуточный каталог, когда символическая ссылка указывает на несуществующую цель или когда не установлен интерпретатор из строки #! скрипта.

ESRCH
Linux 3macOS 3

No such process

Не существует процесса, группы процессов или потока с таким идентификатором; например, при выполнении kill для PID, который уже завершился.

EINTR
Linux 4macOS 4

Interrupted system call

Сигнал прервал системный вызов до его завершения. Это не настоящая ошибка: программа должна повторить вызов или установить обработчик сигнала с SA_RESTART.

EIO
Linux 5macOS 5

Input/output error

Низкоуровневая ошибка ввода-вывода, как правило при чтении с устройства или записи на него. На дисках обычно указывает на повреждённые секторы или неисправный кабель: проверьте dmesg и состояние SMART. Также возникает при записи в уже закрытый терминал.

ENXIO
Linux 6macOS 6

No such device or address

macOS: Device not configured

Устройство или адрес не существует: файл устройства есть, но за ним нет оборудования, либо FIFO открыт на запись с O_NONBLOCK, когда нет ни одного читателя.

E2BIG
Linux 7macOS 7

Argument list too long

Список аргументов и переменных окружения, передаваемый в exec, слишком велик. Это классическое «Argument list too long» при использовании шаблона, который раскрывается в тысячи файлов; используйте find -exec или xargs.

ENOEXEC
Linux 8macOS 8

Exec format error

Файл не имеет распознаваемого исполняемого формата: это бинарный файл для другой архитектуры, он повреждён или это скрипт без строки #!.

EBADF
Linux 9macOS 9

Bad file descriptor

Файловый дескриптор недействителен, уже закрыт или открыт в режиме, который не допускает операцию, например запись в дескриптор, открытый только для чтения.

ECHILD
Linux 10macOS 10

No child processes

У процесса нет дочерних процессов, которые можно ожидать через wait или waitpid; часто потому, что SIGCHLD игнорируется и дочерние процессы убираются автоматически.

EAGAIN
Linux 11macOS 35

Resource temporarily unavailable

Ресурс временно недоступен, и стоит повторить попытку. В неблокирующих операциях это значит, что данных или места пока нет; в fork — что достигнут лимит процессов или потоков (ulimit -u или pids.max в cgroup).

То же значение:EWOULDBLOCK

ENOMEM
Linux 12macOS 12

Cannot allocate memory

Недостаточно памяти для операции или превышен лимит памяти процесса. В fork или mmap причиной может быть политика overcommit, лимит cgroup или нехватка адресного пространства.

EACCES
Linux 13macOS 13

Permission denied

Доступ запрещён правами на файл или на один из каталогов пути (на каждый нужно право на выполнение), ACL, SELinux или AppArmor либо монтированием с noexec. bind также возвращает эту ошибку при использовании порта ниже 1024 без привилегий.

EFAULT
Linux 14macOS 14

Bad address

В системный вызов передан указатель на недопустимый адрес памяти. Это указывает на ошибку в программе.

ENOTBLK
Linux 15macOS 15

Block device required

Операции нужно блочное устройство, например диск, а получен файл другого типа; например, при монтировании обычного файла без -o loop.

EBUSY
Linux 16macOS 16

Device or resource busy

macOS: Device / Resource busy

Устройство или ресурс занят. Типично при размонтировании файловой системы, в которой есть открытые файлы или находится терминал; lsof или fuser показывают, какие процессы её используют.

EEXIST
Linux 17macOS 17

File exists

Файл, каталог или другой объект с таким именем уже существует, например при создании с O_EXCL, при использовании mkdir без -p или при создании ссылки по уже существующему пути.

EXDEV
Linux 18macOS 18

Invalid cross-device link

macOS: Cross-device link

Нельзя создать жёсткую ссылку или переименовать файл между разными файловыми системами. mv решает это копированием и удалением; программы, использующие rename(), должны поступать так же.

ENODEV
Linux 19macOS 19

No such device

macOS: Operation not supported by device

Устройство не существует или не поддерживает операцию; например, при монтировании файловой системы, модуль ядра которой не загружен.

ENOTDIR
Linux 20macOS 20

Not a directory

Компонент пути, который должен быть каталогом, является файлом, или был запрошен каталог (O_DIRECTORY), а объект им не является.

EISDIR
Linux 21macOS 21

Is a directory

Попытка выполнить файловую операцию над каталогом, например открыть его на запись.

EINVAL
Linux 22macOS 22

Invalid argument

Аргумент недопустим для вызова: значение вне диапазона, несовместимое сочетание флагов или операция, которую объект не поддерживает. Ошибка общая: конкретные случаи перечислены на man-странице вызова.

ENFILE
Linux 23macOS 23

Too many open files in system

Исчерпана общесистемная таблица открытых файлов. Лимит настраивается параметром fs.file-max в sysctl.

EMFILE
Linux 24macOS 24

Too many open files

Процесс достиг своего лимита открытых дескрипторов («Too many open files»). Увеличьте лимит через ulimit -n или LimitNOFILE в systemd и проверьте, не оставляет ли программа незакрытые файлы или сокеты.

ENOTTY
Linux 25macOS 25

Inappropriate ioctl for device

Запрошена терминальная операция (ioctl) над тем, что не является терминалом, например когда вывод интерактивной программы перенаправлен в файл или в канал.

ETXTBSY
Linux 26macOS 26

Text file busy

Исполняемый файл занят: нельзя записывать в бинарный файл, пока он выполняется, или запускать файл, который всё ещё открыт на запись. Чтобы обновить его, лучше записать новый файл и переименовать его.

EFBIG
Linux 27macOS 27

File too large

Файл превышает максимальный размер, допустимый файловой системой (4 ГБ в FAT32), или лимит процесса RLIMIT_FSIZE.

ENOSPC
Linux 28macOS 28

No space left on device

На устройстве не осталось места. Если df показывает свободное место, проверьте inode с помощью df -i. inotify тоже возвращает эту ошибку при исчерпании fs.inotify.max_user_watches.

ESPIPE
Linux 29macOS 29

Illegal seek

Нельзя выполнить lseek для канала, FIFO или сокета, потому что у них нет позиции.

EROFS
Linux 30macOS 30

Read-only file system

Файловая система смонтирована только для чтения. Если она перешла в режим только для чтения, хотя никто этого не запрашивал, это сделало ядро, обнаружив ошибки: проверьте dmesg и запустите fsck.

EMLINK
Linux 31macOS 31

Too many links

Превышено максимальное число жёстких ссылок на файл или, в некоторых файловых системах, подкаталогов в каталоге.

EPIPE
Linux 32macOS 32

Broken pipe

Запись в канал или сокет, другой конец которого уже закрыт («Broken pipe»). Помимо ошибки, процесс получает SIGPIPE; это нормально, когда читающая сторона завершается раньше, как в cmd | head.

EDOM
Linux 33macOS 33

Numerical argument out of domain

Аргумент математической функции вне её области определения, например квадратный корень из отрицательного числа.

ERANGE
Linux 34macOS 34

Numerical result out of range

macOS: Result too large

Результат функции слишком велик или слишком мал для представления, или буфера не хватает для результата, как в getcwd с коротким буфером.

EDEADLK
Linux 35macOS 11

Resource deadlock avoided

Предотвращена взаимоблокировка: запрошенная блокировка, например блокировка файла через fcntl или мьютекс с обнаружением ошибок, ожидала бы вечно.

То же значение:EDEADLOCK

ENAMETOOLONG
Linux 36macOS 63

File name too long

Путь или один из его компонентов превышает максимальную длину: в Linux, как правило, 255 байт на имя и 4096 на путь.

ENOLCK
Linux 37macOS 77

No locks available

Нет доступных блокировок. В NFS обычно означает, что служба блокировок (lockd или rpc.statd) не работает.

ENOSYS
Linux 38macOS 78

Function not implemented

Системный вызов не существует в этом ядре или не реализован. Типично для бинарных файлов, собранных для более нового ядра, или для профилей seccomp в контейнерах, которые не знают о новых вызовах.

ENOTEMPTY
Linux 39macOS 66

Directory not empty

Каталог не пуст, например при использовании rmdir или при переименовании поверх существующего каталога. Чтобы удалить его вместе с содержимым, используйте rm -r.

ELOOP
Linux 40macOS 62

Too many levels of symbolic links

При разрешении пути встретилось слишком много символических ссылок подряд, обычно из-за цикла, или O_NOFOLLOW был использован для символической ссылки.

ENOMSG
Linux 42macOS 91

No message of desired type

В очереди сообщений System V нет сообщения запрошенного типа.

EIDRM
Linux 43macOS 90

Identifier removed

Идентификатор IPC System V (очередь, семафор или разделяемая память) был удалён, пока процесс его использовал.

ECHRNG
Linux 44macOS —

Channel number out of range

Номер канала вне диапазона. Это унаследованный код, практически не используемый в Linux.

EL2NSYNC
Linux 45macOS —

Level 2 not synchronized

Уровень 2 не синхронизирован. Это унаследованный код System V, практически не используемый в Linux.

EL3HLT
Linux 46macOS —

Level 3 halted

Уровень 3 остановлен. Это унаследованный код System V, практически не используемый в Linux.

EL3RST
Linux 47macOS —

Level 3 reset

Уровень 3 сброшен. Это унаследованный код System V, практически не используемый в Linux.

ELNRNG
Linux 48macOS —

Link number out of range

Номер ссылки вне диапазона. Это унаследованный код, практически не используемый в Linux.

EUNATCH
Linux 49macOS —

Protocol driver not attached

Драйвер протокола не подключён. Его используют немногие подсистемы, например некоторые драйверы Bluetooth.

ENOCSI
Linux 50macOS —

No CSI structure available

Нет доступной структуры CSI. Это унаследованный код, практически не используемый в Linux.

EL2HLT
Linux 51macOS —

Level 2 halted

Уровень 2 остановлен. Это унаследованный код System V, практически не используемый в Linux.

EBADE
Linux 52macOS —

Invalid exchange

Недопустимый обмен. Это унаследованный код, который некоторые драйверы и файловые системы используют в собственном значении.

EBADR
Linux 53macOS —

Invalid request descriptor

Недопустимый дескриптор запроса. Это унаследованный код, который некоторые драйверы используют в собственном значении.

EXFULL
Linux 54macOS —

Exchange full

Обмен заполнен. Это унаследованный код, практически не используемый в Linux.

ENOANO
Linux 55macOS —

No anode

Нет «anode». Это унаследованный код, практически не используемый в Linux.

EBADRQC
Linux 56macOS —

Invalid request code

Недопустимый код запроса. Код унаследованный; некоторые драйверы используют его для неподдерживаемых команд.

EBADSLT
Linux 57macOS —

Invalid slot

Недопустимый слот. Это унаследованный код, практически не используемый в Linux.

EBFONT
Linux 59macOS —

Bad font file format

Неверный формат файла шрифта. Это унаследованный код, практически не используемый в Linux.

ENOSTR
Linux 60macOS 99

Device not a stream

macOS: Not a STREAM

Устройство не является STREAM. Относится к интерфейсу STREAMS из System V, который Linux не реализует.

ENODATA
Linux 61macOS 96

No data available

macOS: No message available on STREAM

Нет доступных данных. В Linux его возвращает getxattr, когда расширенный атрибут не существует; в macOS этому случаю соответствует ENOATTR.

ETIME
Linux 62macOS 101

Timer expired

macOS: STREAM ioctl timeout

Истёк таймер. Пришёл из STREAMS; в Linux его используют некоторые драйверы и io_uring для операций с ограничением по времени.

ENOSR
Linux 63macOS 98

Out of streams resources

macOS: No STREAM resources

Закончились ресурсы STREAMS — интерфейса, который Linux не реализует.

ENONET
Linux 64macOS —

Machine is not on the network

Машина не подключена к сети. Это редко используемый унаследованный код.

ENOPKG
Linux 65macOS —

Package not installed

Пакет не установлен. Код унаследованный; некоторые подсистемы используют его, когда отсутствует модуль, например криптографический.

EREMOTE
Linux 66macOS 71

Object is remote

macOS: Too many levels of remote in path

Объект является удалённым. В NFS обозначает путь, экспортируемый с другого сервера.

ENOLINK
Linux 67macOS 97

Link has been severed

Связь разорвана. Код унаследованный; некоторые драйверы используют его при потере соединения с устройством.

EADV
Linux 68macOS —

Advertise error

Ошибка «advertise». Это унаследованный код RFS, не используемый в Linux.

ESRMNT
Linux 69macOS —

Srmount error

Ошибка «srmount». Это унаследованный код RFS, не используемый в Linux.

ECOMM
Linux 70macOS —

Communication error on send

Ошибка связи при отправке. Код унаследованный; его используют некоторые сетевые и USB-драйверы.

EPROTO
Linux 71macOS 100

Protocol error

Ошибка протокола: другая сторона или устройство ответили что-то неожиданное. Встречается с USB-устройствами и в соединениях, которые обрываются посреди обмена.

EMULTIHOP
Linux 72macOS 95

Multihop attempted

Попытка многошагового перехода (multihop). Это унаследованный код RFS.

EDOTDOT
Linux 73macOS —

RFS specific error

Ошибка, специфичная для RFS. В Linux не используется.

EBADMSG
Linux 74macOS 94

Bad message

Сообщение имеет неверный формат или повреждено. ext4, XFS и Btrfs возвращают его под псевдонимом EFSBADCRC, когда не сходится контрольная сумма метаданных.

То же значение:EFSBADCRC

EOVERFLOW
Linux 75macOS 84

Value too large for defined data type

macOS: Value too large to be stored in data type

Значение не помещается в целевой тип данных; например, 32-битная программа, собранная без поддержки больших файлов, открывает файл больше 2 ГБ.

ENOTUNIQ
Linux 76macOS —

Name not unique on network

Имя не уникально в сети. Это унаследованный код.

EBADFD
Linux 77macOS —

File descriptor in bad state

Файловый дескриптор находится в неверном состоянии. Его используют ALSA и некоторые драйверы, когда устройство не готово.

EREMCHG
Linux 78macOS —

Remote address changed

Удалённый адрес изменился. Это унаследованный код.

ELIBACC
Linux 79macOS —

Can not access a needed shared library

Нет доступа к необходимой разделяемой библиотеке. Это унаследованный код бинарных файлов a.out.

ELIBBAD
Linux 80macOS —

Accessing a corrupted shared library

Разделяемая библиотека повреждена. Это унаследованный код бинарных файлов a.out.

ELIBSCN
Linux 81macOS —

.lib section in a.out corrupted

Секция .lib бинарного файла a.out повреждена. Это унаследованный код.

ELIBMAX
Linux 82macOS —

Attempting to link in too many shared libraries

Попытка скомпоновать слишком много разделяемых библиотек. Это унаследованный код a.out.

ELIBEXEC
Linux 83macOS —

Cannot exec a shared library directly

Разделяемую библиотеку нельзя запустить напрямую. Это унаследованный код a.out.

EILSEQ
Linux 84macOS 92

Invalid or incomplete multibyte or wide character

macOS: Illegal byte sequence

Последовательность байтов недопустима для кодировки символов, например текст, который не является корректным UTF-8, при преобразовании через iconv или многобайтовые функции.

ERESTART
Linux 85macOS —

Interrupted system call should be restarted

Прерванный вызов нужно перезапустить. Используется внутри ядра и не должен доходить до программ.

ESTRPIPE
Linux 86macOS —

Streams pipe error

Ошибка канала STREAMS. ALSA возвращает его, когда звуковое устройство приостановлено.

EUSERS
Linux 87macOS 68

Too many users

Слишком много пользователей. Его возвращает система дисковых квот, когда её таблица заполнена; встречается редко.

ENOTSOCK
Linux 88macOS 38

Socket operation on non-socket

Операция с сокетом применена к дескриптору, который не является сокетом.

EDESTADDRREQ
Linux 89macOS 39

Destination address required

Не указан адрес назначения: данные отправлены через сокет без соединения без указания, куда.

EMSGSIZE
Linux 90macOS 40

Message too long

Сообщение слишком велико для сокета, например UDP-датаграмма больше максимума или больше MTU, когда фрагментация запрещена.

EPROTOTYPE
Linux 91macOS 41

Protocol wrong type for socket

Протокол не соответствует типу сокета.

ENOPROTOOPT
Linux 92macOS 42

Protocol not available

Запрошенный параметр сокета или протокол недоступен, например параметр setsockopt, неизвестный ядру.

EPROTONOSUPPORT
Linux 93macOS 43

Protocol not supported

Протокол не поддерживается, например потому, что его модуль ядра не загружен.

ESOCKTNOSUPPORT
Linux 94macOS 44

Socket type not supported

Тип сокета не поддерживается в этом семействе адресов.

EOPNOTSUPP
Linux 95macOS 102

Operation not supported

macOS: Operation not supported on socket

Операция не поддерживается сокетом или объектом. В Linux имеет то же значение, что и ENOTSUP, и многие файловые системы возвращают его для нереализованных функций, например fallocate или расширенных атрибутов.

ENOTSUP
Linux 95macOS 45

Operation not supported

Операция не поддерживается. В Linux имеет то же значение, что и EOPNOTSUPP (95); в macOS это разные коды.

EPFNOSUPPORT
Linux 96macOS 46

Protocol family not supported

Семейство протоколов не поддерживается.

EAFNOSUPPORT
Linux 97macOS 47

Address family not supported by protocol

macOS: Address family not supported by protocol family

Семейство адресов не поддерживается; типично при использовании IPv6 в системе или контейнере, где он отключён.

EADDRINUSE
Linux 98macOS 48

Address already in use

Адрес и порт уже используются: другой процесс слушает этот порт, или предыдущее соединение всё ещё находится в TIME_WAIT. Найдите процесс с помощью ss -ltnp или lsof -i :ПОРТ либо используйте SO_REUSEADDR.

EADDRNOTAVAIL
Linux 99macOS 49

Cannot assign requested address

macOS: Can't assign requested address

Невозможно назначить запрошенный адрес: IP не принадлежит ни одному интерфейсу машины, или исчерпаны эфемерные порты для исходящих соединений.

ENETDOWN
Linux 100macOS 50

Network is down

Сетевой интерфейс отключён.

ENETUNREACH
Linux 101macOS 51

Network is unreachable

Сеть назначения недоступна, потому что к ней нет маршрута. Проверьте таблицу маршрутизации и шлюз; это также происходит при подключении по IPv6 без IPv6-связности.

ENETRESET
Linux 102macOS 52

Network dropped connection on reset

Сеть сбросила соединение, например при сбое keepalive.

ECONNABORTED
Linux 103macOS 53

Software caused connection abort

Соединение прервано на локальной стороне, например потому, что клиент закрыл его до того, как сервер принял его через accept.

ECONNRESET
Linux 104macOS 54

Connection reset by peer

Другая сторона резко разорвала соединение пакетом RST («Connection reset by peer»): удалённый процесс закрылся, брандмауэр или балансировщик разорвал неактивное соединение, или были отправлены данные, которых другая сторона не ожидала.

ENOBUFS
Linux 105macOS 55

No buffer space available

В ядре нет свободного буферного пространства для сетевой операции; обычно возникает при большом трафике или переполненных очередях сокетов.

EISCONN
Linux 106macOS 56

Transport endpoint is already connected

macOS: Socket is already connected

Сокет уже подключён.

ENOTCONN
Linux 107macOS 57

Transport endpoint is not connected

macOS: Socket is not connected

Сокет не подключён: попытка отправить или получить данные до подключения, или соединение уже закрыто. В FUSE-монтировании проявляется как «Transport endpoint is not connected», когда его процесс завершился; исправляется размонтированием через fusermount -u.

ESHUTDOWN
Linux 108macOS 58

Cannot send after transport endpoint shutdown

macOS: Can't send after socket shutdown

Нельзя отправлять данные после закрытия этого направления сокета вызовом shutdown.

ETOOMANYREFS
Linux 109macOS 59

Too many references: cannot splice

macOS: Too many references: can't splice

Слишком много ссылок; в Linux — при передаче слишком большого числа вложенных дескрипторов через Unix-сокет.

ETIMEDOUT
Linux 110macOS 60

Connection timed out

macOS: Operation timed out

Истекло время ожидания соединения, потому что узел назначения не ответил. Обычно причина — брандмауэр, молча отбрасывающий пакеты, выключенный хост или маршрут, который не доходит до цели.

ECONNREFUSED
Linux 111macOS 61

Connection refused

Узел назначения отклонил соединение: машина отвечает, но на этом порту никто не слушает, или брандмауэр отвечает отказом. Убедитесь, что служба запущена и слушает на правильном интерфейсе, а не только на 127.0.0.1.

EHOSTDOWN
Linux 112macOS 64

Host is down

Хост назначения выключен.

EHOSTUNREACH
Linux 113macOS 65

No route to host

Нет маршрута к хосту: он не отвечает на ARP в локальной сети, или маршрутизатор либо брандмауэр сообщает, что он недоступен.

EALREADY
Linux 114macOS 37

Operation already in progress

С сокетом уже выполняется операция, например неблокирующий connect, который ещё не завершился.

EINPROGRESS
Linux 115macOS 36

Operation now in progress

Операция выполняется: неблокирующий connect начался и завершится позже. Это не ошибка; нужно дождаться завершения с помощью poll или select.

ESTALE
Linux 116macOS 70

Stale file handle

macOS: Stale NFS file handle

Идентификатор файла устарел: в NFS файл или каталог был удалён или заменён на сервере. Решается повторным открытием пути или перемонтированием.

EUCLEAN
Linux 117macOS —

Structure needs cleaning

Структура требует очистки: файловая система обнаружила повреждение (в ext4 и XFS — под псевдонимом EFSCORRUPTED). Размонтируйте её и запустите fsck или xfs_repair.

То же значение:EFSCORRUPTED

ENOTNAM
Linux 118macOS —

Not a XENIX named type file

Не является именованным файлом XENIX. Это неиспользуемый унаследованный код.

ENAVAIL
Linux 119macOS —

No XENIX semaphores available

Нет доступных семафоров XENIX. Это неиспользуемый унаследованный код.

EISNAM
Linux 120macOS —

Is a named type file

Является именованным файлом XENIX. Это неиспользуемый унаследованный код.

EREMOTEIO
Linux 121macOS —

Remote I/O error

Ошибка удалённого ввода-вывода, например от устройства I2C или удалённого диска, который не ответил.

EDQUOT
Linux 122macOS 69

Disk quota exceeded

macOS: Disc quota exceeded

Превышена дисковая квота пользователя или группы.

ENOMEDIUM
Linux 123macOS —

No medium found

В устройстве нет носителя, например в приводе нет диска или кардридер пуст.

EMEDIUMTYPE
Linux 124macOS —

Wrong medium type

Неверный тип носителя.

ECANCELED
Linux 125macOS 89

Operation canceled

Операция отменена, например асинхронный ввод-вывод или ожидание io_uring.

ENOKEY
Linux 126macOS —

Required key not available

Нужного ключа нет в связке ключей ядра (keyring). Встречается в зашифрованных файловых системах, например fscrypt или eCryptfs, когда ключ не загружен.

EKEYEXPIRED
Linux 127macOS —

Key has expired

Срок действия ключа истёк. PAM и Kerberos также используют этот код, когда истёк срок действия пароля или билета.

EKEYREVOKED
Linux 128macOS —

Key has been revoked

Ключ отозван.

EKEYREJECTED
Linux 129macOS —

Key was rejected by service

Служба отклонила ключ.

EOWNERDEAD
Linux 130macOS 105

Owner died

macOS: Previous owner died

Владелец робастного мьютекса завершился, не освободив его. Новый владелец должен привести защищаемое состояние в согласованный вид и вызвать pthread_mutex_consistent.

ENOTRECOVERABLE
Linux 131macOS 104

State not recoverable

Состояние, защищаемое робастным мьютексом, невозможно восстановить, потому что предыдущий владелец завершился, а никто не пометил его как согласованное.

ERFKILL
Linux 132macOS —

Operation not possible due to RF-kill

Операция невозможна, потому что радиомодуль Wi-Fi или Bluetooth заблокирован через RF-kill. Проверьте rfkill list, физический переключатель или клавишу режима полёта.

EHWPOISON
Linux 133macOS —

Memory page has hardware error

В странице памяти аппаратная ошибка, и ядро пометило её как отравленную.

EFTYPE
Linux 134macOS 79

Inappropriate file type or format

Тип файла не подходит для операции. В macOS и BSD этот код существует давно; в Linux его добавили недавно.

EPROCLIM
Linux —macOS 67

Too many processes

Слишком много процессов. BSD определяет его для лимита процессов, хотя на практике fork возвращает EAGAIN.

EBADRPC
Linux —macOS 72

RPC struct is bad

Неверная структура RPC (Sun RPC, который использует NFS).

ERPCMISMATCH
Linux —macOS 73

RPC version wrong

Версия RPC не совпадает (Sun RPC, который использует NFS).

EPROGUNAVAIL
Linux —macOS 74

RPC program not available

macOS: RPC prog. not avail

Программа RPC недоступна на сервере.

EPROGMISMATCH
Linux —macOS 75

RPC program version wrong

macOS: Program version wrong

Версия программы RPC не совпадает.

EPROCUNAVAIL
Linux —macOS 76

RPC bad procedure for program

macOS: Bad procedure for program

Процедура не существует в программе RPC.

EAUTH
Linux —macOS 80

Authentication error

Ошибка аутентификации, например при монтировании ресурса NFS.

ENEEDAUTH
Linux —macOS 81

Need authenticator

Для операции нужен аутентификатор.

EPWROFF
Linux —macOS 82

Device power is off

Устройство выключено.

EDEVERR
Linux —macOS 83

Device error, e.g. paper out

Ошибка устройства, например в принтере закончилась бумага.

EBADEXEC
Linux —macOS 85

Bad executable

Исполняемый файл недействителен.

EBADARCH
Linux —macOS 86

Bad CPU type in executable

Исполняемый файл предназначен для другого типа процессора, например бинарный файл только для x86_64 на Mac с Apple Silicon без Rosetta 2 или файл для ARM на Mac с Intel.

ESHLIBVERS
Linux —macOS 87

Shared library version mismatch

Версия разделяемой библиотеки не совпадает.

EBADMACHO
Linux —macOS 88

Malformed Macho file

Файл Mach-O имеет неверный формат или повреждён.

ENOATTR
Linux —macOS 93

Attribute not found

Расширенный атрибут не существует; соответствует ENODATA в Linux. Встречается с xattr, например при удалении com.apple.quarantine у файла, у которого его нет.

ENOPOLICY
Linux —macOS 103

No such policy registered

В MAC Framework нет политики, зарегистрированной под этим именем.

EQFULL
Linux —macOS 106

Interface output queue is full

Выходная очередь сетевого интерфейса заполнена.

ENOTCAPABLE
Linux —macOS 107

Capabilities insufficient

Недостаточно возможностей: этот код возвращают вызовы, ограниченные песочницей.

SIGСигналы33
SIGHUP
Linux 1macOS 1

Hangup

Управляющий терминал процесса закрылся или оборвался SSH-сеанс. Многие демоны, например nginx, sshd или rsyslog, воспринимают этот сигнал как команду перечитать конфигурацию; nohup, tmux и screen не дают ему завершить процессы при выходе.

Завершает процесс
SIGINT
Linux 2macOS 2

Interrupt

Прерывание с клавиатуры по Ctrl+C. Программа может перехватить его, чтобы корректно завершиться. Код завершения 130.

Завершает процесс
SIGQUIT
Linux 3macOS 3

Quit

Выход с клавиатуры по Ctrl+\. Завершает процесс с дампом памяти; JVM же использует его для вывода состояния потоков.

Завершает с дампом памяти
SIGILL
Linux 4macOS 4

Illegal instruction

Процессор встретил недопустимую инструкцию: бинарный файл, собранный для более нового процессора (например, с AVX2 или AVX-512 на процессоре, где их нет), повреждённый код или переход на данные.

Завершает с дампом памяти
SIGTRAP
Linux 5macOS 5

Trace/breakpoint trap

Ловушка отладки: её используют отладчики для точек останова. Если сигнал приходит без отладчика, обычно это сбой, обнаруженный самой программой, например проверки Swift в macOS.

Завершает с дампом памяти
SIGABRT
Linux 6macOS 6

Aborted

Процесс вызвал abort(): не выполнилось утверждение (assert), не было перехвачено исключение C++ или библиотека C обнаружила повреждение кучи («double free or corruption»). Код завершения 134.

Завершает с дампом памяти

То же значение:SIGIOT

SIGBUS
Linux 7macOS 10

Bus error

Ошибка шины: обращение к невыровненной памяти на некоторых архитектурах или к части отображённого через mmap файла, которой больше нет, потому что файл был усечён. Также возникает при заполнении /dev/shm.

Завершает с дампом памяти
SIGFPE
Linux 8macOS 8

Floating point exception

Арифметическое исключение. Несмотря на название, чаще всего причина — целочисленное деление на ноль.

Завершает с дампом памяти
SIGKILL
Linux 9macOS 9

Killed

Немедленно завершает процесс: его нельзя перехватить, заблокировать или игнорировать. Его отправляют kill -9, OOM killer ядра при нехватке памяти, а также Docker или Kubernetes, когда контейнер превышает свой лимит памяти (OOMKilled) или не завершается вовремя после SIGTERM. Код завершения 137.

Завершает процессНельзя перехватить
SIGUSR1
Linux 10macOS 30

User defined signal 1

Свободный сигнал, который каждое приложение использует по-своему; например, dd выводит свой прогресс, а nginx заново открывает логи.

Завершает процесс
SIGSEGV
Linux 11macOS 11

Segmentation fault

Нарушение сегментации («Segmentation fault»): обращение к недопустимой памяти, например разыменование нулевого указателя, выход за границы массива или переполнение стека из-за бесконечной рекурсии. Код завершения 139.

Завершает с дампом памяти
SIGUSR2
Linux 12macOS 31

User defined signal 2

Второй свободный сигнал, который каждое приложение использует по-своему.

Завершает процесс
SIGPIPE
Linux 13macOS 13

Broken pipe

Запись в канал или сокет без читателя. Это нормально в cmd | head, где читающая сторона завершается раньше; серверы обычно игнорируют этот сигнал и обрабатывают ошибку EPIPE. Код завершения 141.

Завершает процесс
SIGALRM
Linux 14macOS 14

Alarm clock

Истёк таймер, установленный с помощью alarm или setitimer.

Завершает процесс
SIGTERM
Linux 15macOS 15

Terminated

Запрос на корректное завершение. Это сигнал по умолчанию для kill, systemctl stop, docker stop и Kubernetes при удалении пода; процесс должен закрыть свои соединения и завершиться. Код завершения 143.

Завершает процесс
SIGSTKFLT
Linux 16macOS —

Stack fault

Ошибка стека сопроцессора. В современном Linux не используется.

Завершает процесс
SIGCHLD
Linux 17macOS 20

Child exited

Дочерний процесс завершился, остановился или продолжил работу. Родитель должен забрать его через wait; иначе дочерний процесс остаётся зомби.

Игнорируется

То же значение:SIGCLD

SIGCONT
Linux 18macOS 19

Continued

Возобновляет остановленный процесс, как это делают fg и bg в оболочке.

Возобновляет процесс
SIGSTOP
Linux 19macOS 17

Stopped (signal)

Останавливает процесс; его нельзя перехватить или игнорировать. Процесс возобновляется сигналом SIGCONT.

Останавливает процессНельзя перехватить
SIGTSTP
Linux 20macOS 18

Stopped

Остановка с терминала по Ctrl+Z. В отличие от SIGSTOP, программа может его перехватить.

Останавливает процесс
SIGTTIN
Linux 21macOS 21

Stopped (tty input)

Фоновый процесс попытался читать с терминала.

Останавливает процесс
SIGTTOU
Linux 22macOS 22

Stopped (tty output)

Фоновый процесс попытался писать в терминал при включённом stty tostop или изменить его настройки.

Останавливает процесс
SIGURG
Linux 23macOS 16

Urgent I/O condition

На сокет поступили срочные (внеполосные) данные. Go использует этот сигнал внутри для прерывания горутин.

Игнорируется
SIGXCPU
Linux 24macOS 24

CPU time limit exceeded

Превышен лимит процессорного времени процесса (ulimit -t).

Завершает с дампом памяти
SIGXFSZ
Linux 25macOS 25

File size limit exceeded

Превышен максимальный размер файла, разрешённый процессу (ulimit -f).

Завершает с дампом памяти
SIGVTALRM
Linux 26macOS 26

Virtual timer expired

Истёк виртуальный таймер, который учитывает только процессорное время процесса.

Завершает процесс
SIGPROF
Linux 27macOS 27

Profiling timer expired

Истёк таймер профилирования, который используют профилировщики.

Завершает процесс
SIGWINCH
Linux 28macOS 28

Window changed

Изменился размер окна терминала; полноэкранные программы используют этот сигнал, чтобы перерисоваться.

Игнорируется
SIGIO
Linux 29macOS 23

input/output possible signal

На дескрипторе, настроенном с O_ASYNC, доступен ввод-вывод. В Linux SIGPOLL — тот же сигнал.

Завершает процесс

То же значение:SIGPOLL

SIGPWR
Linux 30macOS —

Power failure

Сбой питания, о котором программное обеспечение ИБП сообщает системе init.

Завершает процесс
SIGSYS
Linux 31macOS 12

Bad system call

Неверный системный вызов. Сегодня обычная причина — фильтр seccomp, который его блокирует, как в контейнерах.

Завершает с дампом памяти
SIGEMT
Linux —macOS 7

EMT trap

Ловушка эмуляции (EMT). Существует в macOS и BSD, но не в Linux на x86 и ARM.

Завершает с дампом памяти
SIGINFO
Linux —macOS 29

Information request

Запрос информации по Ctrl+T в терминале macOS и BSD; многие команды в ответ показывают свой прогресс.

Игнорируется
$?Коды завершения24
0EXIT_SUCCESS

Команда завершилась успешно. Это единственный код, означающий успех: любое другое значение указывает на ошибку.

C
1EXIT_FAILURE

Общая ошибка; что она означает, решает каждая программа. Подробности обычно в том, что команда вывела в stderr. grep и diff используют его в другом смысле: «совпадений не найдено» или «файлы различаются».

C
2Misuse of shell builtins

Неправильное использование встроенной команды оболочки или синтаксическая ошибка в скрипте. Многие программы также используют его для недопустимых параметров, а grep — для настоящих ошибок.

Bash
64EX_USAGE

Команда использована неправильно: не хватает аргументов, есть лишние или какой-то параметр неверен.

sysexits.h
65EX_DATAERR

Входные данные имеют неверный формат.

sysexits.h
66EX_NOINPUT

Входной файл не существует или не может быть прочитан.

sysexits.h
67EX_NOUSER

Указанный пользователь не существует; используется в основном почтовыми программами.

sysexits.h
68EX_NOHOST

Имя хоста не существует.

sysexits.h
69EX_UNAVAILABLE

Необходимая служба недоступна, или произошёл сбой, который не подходит под другие категории.

sysexits.h
70EX_SOFTWARE

Внутренняя ошибка программы.

sysexits.h
71EX_OSERR

Ошибка операционной системы, например невозможно выполнить fork или создать канал.

sysexits.h
72EX_OSFILE

Отсутствует системный файл, например /etc/passwd, или в нём есть ошибка.

sysexits.h
73EX_CANTCREAT

Невозможно создать выходной файл.

sysexits.h
74EX_IOERR

Ошибка ввода-вывода при чтении или записи файла.

sysexits.h
75EX_TEMPFAIL

Временный сбой: стоит повторить попытку позже. Почтовые серверы используют его, чтобы оставить сообщение в очереди.

sysexits.h
76EX_PROTOCOL

Удалённая система ответила что-то, что не соответствует протоколу.

sysexits.h
77EX_NOPERM

Недостаточно прав для операции.

sysexits.h
78EX_CONFIG

Ошибка в конфигурации.

sysexits.h
124Timed out

Команда timeout завершила процесс, потому что было превышено указанное время.

GNU timeout
125Container failed to run

Сбой самого docker run до запуска контейнера, например из-за неверного параметра или ошибки демона. GNU timeout тоже возвращает этот код, когда сбой произошёл в нём самом.

Docker
126Command invoked cannot execute

Файл существует, но не может быть выполнен: у него нет права на выполнение, это каталог или бинарный файл для другой архитектуры. В Docker — команда контейнера не является исполняемой.

POSIX
127Command not found

Команда не найдена: она не установлена, её нет в PATH или в имени опечатка. В скриптах также появляется, когда отсутствует интерпретатор из строки #!; в Docker — когда команды контейнера нет в образе.

POSIX
128Fatal error

Коды больше 128 означают, что процесс был завершён сигналом, но 128 не соответствует ни одному сигналу. Git использует его для всех своих фатальных ошибок («fatal: …»), например когда репозиторий не существует или не удалась аутентификация при клонировании.

Git
255Exit status out of range

Код завершения вышел за пределы диапазона: exit -1 приходит как 255, потому что сохраняются только 8 бит. ssh тоже возвращает его, когда не удаётся подключение или аутентификация, чтобы отличить это от кода удалённой команды.

POSIX

Значения для Linux приведены для x86, x86-64 и ARM; на Alpha, MIPS, SPARC и PA-RISC некоторые errno и сигналы пронумерованы иначе. Сообщения на английском — это те, что выводят strerror и strsignal в glibc, а также в macOS, если они отличаются. Коды завершения больше 128 интерпретируются как 128 плюс номер сигнала — это соглашение bash, Docker и Kubernetes.

Как это работает

Когда системный вызов в Linux завершается неудачей, он возвращает -1 и записывает в переменную errno число, которое объясняет причину: 2 — это ENOENT, файл не существует; 13 — EACCES, доступ запрещён. strerror превращает это число в текст, который виден на экране, например «No such file or directory». Python показывает его как [Errno 13], Node.js — как code: 'ECONNREFUSED', а Go, Rust или Java — тем же текстом. Номера с 1 по 34 пришли из оригинального Unix и одинаковы во всех системах; следующие каждая система пронумеровала по-своему, поэтому ECONNREFUSED — это 111 в Linux и 61 в macOS. Имя переносимо, а номер — нет.

Сигналы — это уведомления, которые ядро или другой процесс отправляют процессу: SIGINT при нажатии Ctrl+C, SIGTERM, чтобы попросить его завершиться, SIGKILL, чтобы завершить его без вопросов, SIGSEGV при обращении к недопустимой памяти. У каждого есть действие по умолчанию, и почти все можно перехватить, чтобы сделать что-то другое. Когда сигнал убивает процесс, оболочка сообщает в качестве кода завершения 128 плюс номер сигнала: 137 — это SIGKILL (9), 139 — SIGSEGV (11), а 143 — SIGTERM (15). Docker и Kubernetes используют то же соглашение.

Код завершения — это число, которое программа оставляет при завершении: 0 означает успех, а любое другое значение — ошибку. Сохраняются только 8 бит, поэтому диапазон — от 0 до 255. Соглашений немного: 126 и 127 использует оболочка, когда не может выполнить или не находит команду, коды с 64 по 78 определены в sysexits.h из BSD, а остальные каждая программа выбирает сама, как grep, который возвращает 1, когда ничего не находит.

Примеры

Last State: Terminated · Reason: OOMKilled · Exit Code: 137137 = 128 + 9 · SIGKILLКонтейнер превысил свой лимит памяти, и ядро убило его сигналом SIGKILL. Нужно увеличить лимит в resources.limits.memory или выяснить, почему процесс потребляет столько памяти; перезапуск проблему не решит.
Error: connect ECONNREFUSED 127.0.0.1:5432ECONNREFUSED · Linux 111 · macOS 61 · Connection refusedNode.js не смог подключиться к PostgreSQL, потому что на порту 5432 никто не слушает. Если приложение работает в контейнере, 127.0.0.1 — это сам контейнер, а не машина: нужно использовать имя сервиса базы данных.
OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 48Число 48 выдаёт, что программа работает в macOS: в Linux та же ошибка имеет номер 98. В обоих случаях порт уже занят другим процессом; lsof -i :ПОРТ покажет каким.

Сценарии использования

  • Понять ошибку приложения на Python, Node.js, Go или C, которое показывает только номер или имя errno.
  • Выяснить по коду завершения, почему остановился контейнер Docker или перезапускается под Kubernetes.
  • Перевести номер errno из macOS в правильное имя: начиная с 35, номера не совпадают с Linux.
  • Расшифровать код завершения скрипта, задания cron или CI-задачи, которые завершились с ошибкой.
  • Выбрать, какой сигнал отправить через kill, и узнать, что сделает процесс, если не перехватит его.
  • Написать переносимую обработку ошибок, которая сравнивает по имени, а не по номеру.

Часто задаваемые вопросы

Что означает exit code 137?

Что процесс был завершён сигналом 9, SIGKILL (128 + 9). Чаще всего причина в памяти: контейнер превысил свой лимит, и Kubernetes сообщает об этом как OOMKilled, или OOM killer ядра выбрал этот процесс, что остаётся в dmesg как «Out of memory: Killed process». Это также происходит при docker kill или когда процесс не завершается в отведённое время после SIGTERM: 10 секунд в docker stop и 30 в Kubernetes.

Чем отличаются SIGTERM и SIGKILL?

SIGTERM просит процесс завершиться, и процесс может перехватить его, чтобы закрыть соединения, сохранить данные и выйти. SIGKILL означает, что ядро завершает процесс немедленно и процесс ничего не может сделать. Правильно отправить SIGTERM, подождать несколько секунд и прибегать к SIGKILL, только если процесс всё ещё жив, — именно так поступают systemd, docker stop и Kubernetes.

Почему у того же errno другой номер в macOS?

Потому что POSIX определяет имена, но не номера. Номера с 1 по 34 все системы унаследовали от оригинального Unix; дальше BSD, от которой происходит macOS, и System V, за которой следовал Linux, нумеровали их независимо. Поэтому всегда лучше сравнивать по имени — через errno.ECONNREFUSED в Python, err.code в Node.js или константу в C, — а не по номеру.

Чем отличаются EACCES и EPERM?

EACCES («Permission denied») означает, что этого не позволяют права на файл или на какой-либо каталог пути либо мешает ACL или SELinux: решается через chmod, chown или соответствующую политику. EPERM («Operation not permitted») означает, что сама операция требует привилегий независимо от прав доступа, например сменить владельца файла или убить процесс другого пользователя: нужен root, capability или снятие атрибута, например атрибута неизменяемости.

Как посмотреть код завершения команды или контейнера?

В bash и zsh echo $? показывает код последней команды; в PowerShell — $LASTEXITCODE. В Docker docker ps -a показывает его в столбце STATUS, например «Exited (137)». В Kubernetes kubectl describe pod показывает его в «Last State: Terminated» вместе с причиной, например OOMKilled или Error.