#server#cheatsheet

exitcode

developer

exit codes速查

GNU/Linux exit codes

| Exit Code | Description | | --------- | ------------------------------------------------- | | 0 | Success | | 1 | Operation not permitted | | 2 | No such file or directory | | 3 | No such process | | 4 | Interrupted system call | | 5 | Input/output error | | 6 | No such device or address | | 7 | Argument list too long | | 8 | Exec format error | | 9 | Bad file descriptor | | 10 | No child processes | | 11 | Resource temporarily unavailable | | 12 | Cannot allocate memory | | 13 | Permission denied | | 14 | Bad address | | 15 | Block device required | | 16 | Device or resource busy | | 17 | File exists | | 18 | Invalid cross-device link | | 19 | No such device | | 20 | Not a directory | | 21 | Is a directory | | 22 | Invalid argument | | 23 | Too many open files in system | | 24 | Too many open files | | 25 | Inappropriate ioctl for device | | 26 | Text file busy | | 27 | File too large | | 28 | No space left on device | | 29 | Illegal seek | | 30 | Read-only file system | | 31 | Too many links | | 32 | Broken pipe | | 33 | Numerical argument out of domain | | 34 | Numerical result out of range | | 35 | Resource deadlock avoided | | 36 | File name too long | | 37 | No locks available | | 38 | Function not implemented | | 39 | Directory not empty | | 40 | Too many levels of symbolic links | | 42 | No message of desired type | | 43 | Identifier removed | | 44 | Channel number out of range | | 45 | Level 2 not synchronized | | 46 | Level 3 halted | | 47 | Level 3 reset | | 48 | Link number out of range | | 49 | Protocol driver not attached | | 50 | No CSI structure available | | 51 | Level 2 halted | | 52 | Invalid exchange | | 53 | Invalid request descriptor | | 54 | Exchange full | | 55 | No anode | | 56 | Invalid request code | | 57 | Invalid slot | | 59 | Bad font file format | | 60 | Device not a stream | | 61 | No data available | | 62 | Timer expired | | 63 | Out of streams resources | | 64 | Machine is not on the network | | 65 | Package not installed | | 66 | Object is remote | | 67 | Link has been severed | | 68 | Advertise error | | 69 | Srmount error | | 70 | Communication error on send | | 71 | Protocol error | | 72 | Multihop attempted | | 73 | RFS specific error | | 74 | Bad message | | 75 | Value too large for defined data type | | 76 | Name not unique on network | | 77 | File descriptor in bad state | | 78 | Remote address changed | | 79 | Can not access a needed shared library | | 80 | Accessing a corrupted shared library | | 81 | .lib section in a.out corrupted | | 82 | Attempting to link in too many shared libraries | | 83 | Cannot exec a shared library directly | | 84 | Invalid or incomplete multibyte or wide character | | 85 | Interrupted system call should be restarted | | 86 | Streams pipe error | | 87 | Too many users | | 88 | Socket operation on non-socket | | 89 | Destination address required | | 90 | Message too long | | 91 | Protocol wrong type for socket | | 92 | Protocol not available | | 93 | Protocol not supported | | 94 | Socket type not supported | | 95 | Operation not supported | | 96 | Protocol family not supported | | 97 | Address family not supported by protocol | | 98 | Address already in use | | 99 | Cannot assign requested address | | 100 | Network is down | | 101 | Network is unreachable | | 102 | Network dropped connection on reset | | 103 | Software caused connection abort | | 104 | Connection reset by peer | | 105 | No buffer space available | | 106 | Transport endpoint is already connected | | 107 | Transport endpoint is not connected | | 108 | Cannot send after transport endpoint shutdown | | 109 | Too many references | | 110 | Connection timed out | | 111 | Connection refused | | 112 | Host is down | | 113 | No route to host | | 114 | Operation already in progress | | 115 | Operation now in progress | | 116 | Stale file handle | | 117 | Structure needs cleaning | | 118 | Not a XENIX named type file | | 119 | No XENIX semaphores available | | 120 | Is a named type file | | 121 | Remote I/O error | | 122 | Disk quota exceeded | | 123 | No medium found | | 124 | Timer timeout | | 125 | Operation canceled | | 126 | Required key not available | | 127 | Key has expired | | 128 | Key has been revoked | | 129 | Key was rejected by service | | 130 | Owner died | | 131 | State not recoverable | | 132 | Operation not possible due to RF-kill | | 133 | Memory page has hardware error |

Docker exit codes

| code | desrciption | | :----------- | ------------------------------------------------------------ | | 0 | 正常退出,容器任务成功完成 | | 1 | 应用程序内部错误(最常见的异常退出码) | | 125 | Docker daemon 执行错误(通常是docker run命令本身的问题) | | 126 | 容器命令无法执行(权限问题或命令不是可执行文件) | | 127 | 容器命令未找到(路径错误或镜像中没有该命令)
Shell 脚本中可能出现错字且字符无法识别的情况 | | | | | 128+n | 容器被信号n终止 | | 130 (128+2) | SIGINT,Ctrl+C 中断 | | 137 (128+9) | SIGKILL,强制终止(不可捕获),kill -9,docker kill | | 139 (128+11) | SIGSEGV,段错误(程序崩溃),kill -11,代码或基础镜像有问题 | | 143 (128+15) | SIGTERM,优雅终止请求(可捕获),kill -15,终端关闭,docker stop |

查看docker exit code

docker ps --filter "status=exited"
docker inspect <id> --format='{{.State.ExitCode}}'

备注

Exit Code 1 程序错误,例如Dockerfile 中引用不存在的文件,如 entrypoint 中引用了错误的包。程序错误可以很简单,例如 “除以0”,也可以很复杂,比如空引用或者其他程序 crash

有时 docker stop 也会导致 Exit Code 137。发生在与代码无法处理 SIGTERM 的情况下,docker 进程等待十秒钟然后发出 SIGKILL 强制退出。

Exit Code 1 或 255:因为很多程序员写异常退出时习惯用 exit(1) 或 exit(-1),-1 会根据转换规则转成 255。这个一般是自定义 code,要看具体逻辑。 退出状态码的区间

必须在 0-255 之间,0 表示正常退出 外界将程序中断退出,状态码在 129-255 程序自身异常退出,状态码一般在 1-128 假如写代码指定的退出状态码时不在 0-255 之间,例如: exit(-1),这时会自动做一个转换,最终呈现的状态码还是会在 0-255 之间。我们把状态码记为 code,当指定的退出时状态码为负数,那么转换公式如下:256 – (|code| % 256)