Linux エラー コード
ECONNREFUSED や「[Errno 13]」などの errno、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

その ID のプロセス、プロセス グループ、スレッドは存在しません。たとえば、すでに終了した PID に kill を実行した場合です。

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 または cgroup の pids.max) に達したことを意味します。

同じ値:EWOULDBLOCK

ENOMEM
Linux 12macOS 12

Cannot allocate memory

操作に必要なメモリが足りないか、プロセスのメモリ上限を超えました。fork や mmap では、オーバーコミット ポリシー、cgroup の上限、アドレス空間の不足が原因の場合があります。

EACCES
Linux 13macOS 13

Permission denied

ファイルまたはパス上のディレクトリのアクセス許可 (各ディレクトリに実行許可が必要)、ACL、SELinux や AppArmor、noexec でのマウントによってアクセスが拒否されました。特権なしで 1024 未満のポートを使うと、bind もこのエラーを返します。

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 で作成したとき、-p なしで mkdir を使ったとき、作成先がすでに存在するリンクを作成したときです。

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

システム全体の、開いているファイルのテーブルを使い切りました。上限は sysctl の fs.file-max で調整します。

EMFILE
Linux 24macOS 24

Too many open files

プロセスが開いている記述子の上限に達しました (「Too many open files」)。ulimit -n または systemd の LimitNOFILE で上限を引き上げ、プログラムがファイルやソケットを閉じ忘れていないか確認してください。

ENOTTY
Linux 25macOS 25

Inappropriate ioctl for device

端末ではないものに対して端末の操作 (ioctl) が要求されました。たとえば、対話型プログラムの出力をファイルやパイプにリダイレクトした場合です。

ETXTBSY
Linux 26macOS 26

Text file busy

実行ファイルが使用中です。実行中のバイナリには書き込めず、書き込み用に開かれたままのバイナリは実行できません。更新するときは、新しいファイルを書き込んでから名前を変更するのが安全です。

EFBIG
Linux 27macOS 27

File too large

ファイルが、ファイル システムで扱える最大サイズ (FAT32 では 4 GB) またはプロセスの RLIMIT_FSIZE 上限を超えています。

ENOSPC
Linux 28macOS 28

No space left on device

デバイスに空き領域がありません。df で空きがあるのに発生する場合は、df -i で inode を確認してください。fs.inotify.max_user_watches を使い切ったときは inotify もこのエラーを返します。

ESPIPE
Linux 29macOS 29

Illegal seek

パイプ、FIFO、ソケットには位置がないため、lseek できません。

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

プロセスが使用している間に、System V IPC の識別子 (キュー、セマフォ、共有メモリ) が削除されました。

ECHRNG
Linux 44macOS —

Channel number out of range

チャネル番号が範囲外です。Linux では実用上使われない旧来のコードです。

EL2NSYNC
Linux 45macOS —

Level 2 not synchronized

レベル 2 が同期していません。Linux では実用上使われない、System V 由来の旧来のコードです。

EL3HLT
Linux 46macOS —

Level 3 halted

レベル 3 が停止しました。Linux では実用上使われない、System V 由来の旧来のコードです。

EL3RST
Linux 47macOS —

Level 3 reset

レベル 3 がリセットされました。Linux では実用上使われない、System V 由来の旧来のコードです。

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 が停止しました。Linux では実用上使われない、System V 由来の旧来のコードです。

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 ではありません。Linux が実装していない System V の STREAMS インターフェイスのコードです。

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 のリソースが残っていません。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」のエラーです。Linux では使われない、RFS 由来の旧来のコードです。

ESRMNT
Linux 69macOS —

Srmount error

「srmount」のエラーです。Linux では使われない、RFS 由来の旧来のコードです。

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 GB を超えるファイルを開いた場合です。

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

a.out バイナリの .lib セクションが破損しています。旧来のコードです。

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

バイト シーケンスが文字エンコードとして無効です。たとえば、iconv やマルチバイト関数で変換するテキストが有効な UTF-8 ではない場合です。

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 が無効になっているシステムやコンテナーで 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

リモート I/O エラーです。たとえば、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

操作がキャンセルされました。たとえば、非同期 I/O や io_uring の待機です。

ENOKEY
Linux 126macOS —

Required key not available

必要なキーがカーネルのキーリングにありません。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 構造体が正しくありません (NFS が使う Sun RPC)。

ERPCMISMATCH
Linux —macOS 73

RPC version wrong

RPC のバージョンが一致しません (NFS が使う Sun RPC)。

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

実行ファイルが別の種類の CPU 用です。たとえば、Rosetta 2 のない Apple Silicon 搭載 Mac 上の x86_64 専用バイナリや、Intel 搭載 Mac 上の ARM バイナリです。

ESHLIBVERS
Linux —macOS 87

Shared library version mismatch

共有ライブラリのバージョンが一致しません。

EBADMACHO
Linux —macOS 88

Malformed Macho file

Mach-O ファイルの形式が不正か、破損しています。

ENOATTR
Linux —macOS 93

Attribute not found

拡張属性が存在しません。Linux の ENODATA に相当します。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

プロセッサーが不正な命令を検出しました。新しい CPU 向けにコンパイルされたバイナリ (たとえば、AVX2 や AVX-512 を持たないプロセッサーでそれらを使うもの)、破損したコード、データへのジャンプが原因です。

コア ダンプを出力して終了
SIGTRAP
Linux 5macOS 5

Trace/breakpoint trap

デバッグ トラップです。デバッガーがブレークポイントに使います。デバッガーなしで届いた場合は、macOS の Swift のチェックのように、プログラム自身が検出した障害であることがよくあります。

コア ダンプを出力して終了
SIGABRT
Linux 6macOS 6

Aborted

プロセスが abort() を呼び出しました。失敗したアサーション、捕捉されなかった 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、そしてコンテナーがメモリ上限を超えた (OOMKilled) か SIGTERM の後に時間内に終了しなかったときの Docker や Kubernetes が送信します。終了コードは 137 です。

プロセスを終了捕捉できません
SIGUSR1
Linux 10macOS 30

User defined signal 1

各アプリケーションが独自の用途に使える空きシグナルです。たとえば、dd は進行状況を報告し、nginx はログを開き直します。

プロセスを終了
SIGSEGV
Linux 11macOS 11

Segmentation fault

セグメンテーション違反 (「Segmentation fault」) です。NULL ポインターの逆参照、配列の範囲外へのアクセス、無限再帰によるスタック オーバーフローなど、無効なメモリへのアクセスです。終了コードは 139 です。

コア ダンプを出力して終了
SIGUSR2
Linux 12macOS 31

User defined signal 2

各アプリケーションが独自の用途に使える 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 も Pod を削除するときに送信します。プロセスは接続を閉じて終了する必要があります。終了コードは 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 は goroutine を中断するために内部で使います。

無視
SIGXCPU
Linux 24macOS 24

CPU time limit exceeded

プロセスの CPU 時間の上限 (ulimit -t) を超えました。

コア ダンプを出力して終了
SIGXFSZ
Linux 25macOS 25

File size limit exceeded

プロセスに許可された最大ファイル サイズ (ulimit -f) を超えました。

コア ダンプを出力して終了
SIGVTALRM
Linux 26macOS 26

Virtual timer expired

プロセスの CPU 時間だけを数える仮想タイマーが期限切れになりました。

プロセスを終了
SIGPROF
Linux 27macOS 27

Profiling timer expired

プロファイラーが使うプロファイリング タイマーが期限切れになりました。

プロセスを終了
SIGWINCH
Linux 28macOS 28

Window changed

端末ウィンドウのサイズが変わりました。全画面のプログラムは、これを使って再描画します。

無視
SIGIO
Linux 29macOS 23

input/output possible signal

O_ASYNC を設定した記述子で I/O が可能になりました。Linux では、SIGPOLL も同じシグナルです。

プロセスを終了

同じ値:SIGPOLL

SIGPWR
Linux 30macOS —

Power failure

電源障害です。UPS ソフトウェアが init システムに通知します。

プロセスを終了
SIGSYS
Linux 31macOS 12

Bad system call

不正なシステム コールです。現在よくある原因は、コンテナーのようにそれをブロックする seccomp フィルターです。

コア ダンプを出力して終了
SIGEMT
Linux —macOS 7

EMT trap

エミュレーション トラップ (EMT) です。macOS と BSD にはありますが、x86 や ARM 上の Linux にはありません。

コア ダンプを出力して終了
SIGINFO
Linux —macOS 29

Information request

macOS と BSD の端末で Ctrl+T によって送られる情報の要求です。多くのコマンドは進行状況を表示して応答します。

無視
$?終了コード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 も、失敗したのが 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

終了コードが範囲外でした。8 ビットしか保持されないため、exit -1 は 255 になります。ssh も、リモート コマンドのコードと区別するため、接続や認証に失敗したときにこれを返します。

POSIX

Linux の値は x86、x86-64、ARM のものです。Alpha、MIPS、SPARC、PA-RISC では一部の errno とシグナルの番号が異なります。英語のメッセージは glibc の strerror と strsignal が表示するもので、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 は Linux では 111、macOS では 61 です。名前には移植性がありますが、番号にはありません。

シグナルは、カーネルや別のプロセスがプロセスに送る通知です。Ctrl+C を押したときの SIGINT、終了を求める SIGTERM、問答無用で終了させる SIGKILL、無効なメモリにアクセスしたときの SIGSEGV などがあります。それぞれにデフォルトの動作があり、ほとんどは捕捉して別の処理を行えます。シグナルによってプロセスが終了すると、シェルは終了コードとして 128 にシグナル番号を足した値を報告します。137 は SIGKILL (9)、139 は SIGSEGV (11)、143 は SIGTERM (15) です。Docker と Kubernetes も同じ規則を使います。

終了コードは、プログラムが終了時に残す番号です。0 は成功、それ以外の値はエラーを意味します。8 ビットしか保持されないため、範囲は 0 から 255 です。規則はわずかしかありません。126 と 127 はコマンドを実行できない場合と見つからない場合にシェルが使い、64 から 78 は BSD の sysexits.h で定義されています。残りは各プログラムが決めます。たとえば 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 refusedポート 5432 で待ち受けているものがないため、Node.js は PostgreSQL に接続できませんでした。アプリケーションがコンテナーで動いている場合、127.0.0.1 はホストではなくそのコンテナー自身です。データベースのサービス名を使う必要があります。
OSError: [Errno 48] Address already in useEADDRINUSE · Linux 98 · macOS 4848 という番号から、プログラムが macOS で動いていることがわかります。Linux では同じエラーが 98 です。どちらの場合も、別のプロセスがすでにそのポートを使っています。lsof -i :ポート でどのプロセスかを確認できます。

ユースケース

  • 番号や errno の名前しか表示しない、Python、Node.js、Go、C のアプリケーションのエラーを理解する。
  • 終了コードから、Docker コンテナーが停止した理由や Kubernetes の Pod が再起動する理由を突き止める。
  • macOS の errno 番号を正しい名前に変換する。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 の後に猶予時間内にプロセスが終了しなかった場合 (docker stop では 10 秒、Kubernetes では 30 秒) にも発生します。

SIGTERM と SIGKILL の違いは何ですか?

SIGTERM はプロセスに終了を求めるもので、プロセスはこれを捕捉して接続を閉じ、データを保存してから終了できます。SIGKILL はカーネルがその場でプロセスを終了させるもので、プロセスは何もできません。正しい手順は、SIGTERM を送って数秒待ち、まだ動いている場合にだけ SIGKILL を使うことです。systemd、docker stop、Kubernetes もそのようにしています。

同じ errno が macOS では別の番号になるのはなぜですか?

POSIX は名前を定義していますが、番号は定義していないためです。1 から 34 まではすべてのシステムが元の Unix の番号を受け継ぎましたが、それ以降は macOS の元になった BSD と、Linux が従った System V が別々に番号を付けました。そのため、番号ではなく、Python の errno.ECONNREFUSED、Node.js の err.code、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 などの理由とともに表示されます。