Linux/Unix Exit Code 和 Signal 参考指南
一、Exit Code 基本规则
-
基本定义:
- 0:成功执行
- 非0:执行失败
-
标准退出码范围:
0 → 成功完成 1-127 → 程序错误退出(由程序主动调用exit()) 128-255 → 信号终止(由系统信号导致)
-
常见Exit Code含义:
1 → 通用错误 2 → shell内建命令使用错误 3-124 → 程序特定错误 125 → 内存溢出 126 → 命令无法执行 127 → 命令未找到 128 → exit参数无效 129-255 → 信号终止(实际信号值 = Exit Code - 128)
二、常见作业终止原因及Exit Code
-
资源限制相关:
0:9 → 作业被取消 0:15 → 作业被取消或超时 0:53 → 文件/目录权限错误 0:125 → 内存耗尽
-
信号终止相关:
137 (128+9) → 超出时间限制(SIGKILL) 139 (128+11) → 段错误(SIGSEGV) 140 (128+12) → 超出墙钟时间限制
三、系统信号(Signal)分类
-
程序终止信号:
SIGHUP(1) → 终端断开或控制进程终止 SIGINT(2) → 用户中断(Ctrl+C) SIGQUIT(3) → 用户退出(Ctrl+\) SIGKILL(9) → 强制终止(不可捕获) SIGTERM(15) → 请求正常终止
-
程序错误信号:
SIGILL(4) → 非法指令 SIGTRAP(5) → 调试断点 SIGABRT(6) → 异常终止 SIGBUS(7) → 内存访问错误 SIGFPE(8) → 浮点运算错误 SIGSEGV(11) → 无效内存引用
-
进程控制信号:
SIGCHLD(17) → 子进程状态改变 SIGCONT(18) → 恢复被停止的进程 SIGSTOP(19) → 停止进程执行 SIGTSTP(20) → 终端停止(Ctrl+Z) SIGTTIN(21) → 后台读取终端 SIGTTOU(22) → 后台写入终端
-
资源和定时器信号:
SIGALRM(14) → 定时器到期 SIGXCPU(24) → CPU时间超限 SIGXFSZ(25) → 文件大小超限 SIGVTALRM(26) → 虚拟定时器到期 SIGPROF(27) → 性能分析定时器到期
-
系统和IO信号:
SIGPIPE(13) → 管道断开 SIGSTKFLT(16) → 协处理器栈错误 SIGURG(23) → 套接字紧急情况 SIGWINCH(28) → 终端窗口大小改变 SIGIO(29) → 异步IO事件 SIGPWR(30) → 电源异常 SIGSYS(31) → 无效系统调用
-
实时信号:
SIGRTMIN+n(34-49) → 较低优先级实时信号 SIGRTMAX-n(50-64) → 较高优先级实时信号
四、调试
-
信号使用建议:
- 调试:关注4、5、7、8、11号信号 - 进程管理:使用1、2、9、15、18、19号信号 - 守护进程:处理1、17号信号 - 性能优化:关注24-27号信号 - 自定义处理:使用实时信号(34-64)
-
文件操作建议:
推荐使用rsync -rlt进行文件移动或复制 可选参数:--remove-source-files(复制后删除源文件)