Way to the science

Linux/Unix Exit Code 和 Signal 参考指南

Linux/Unix Exit Code 和 Signal 参考指南

Linux/Unix Signal

一、Exit Code 基本规则

  1. 基本定义:

    • 0:成功执行
    • 非0:执行失败
  2. 标准退出码范围:

    0        → 成功完成
    1-127    → 程序错误退出(由程序主动调用exit())
    128-255  → 信号终止(由系统信号导致)
  3. 常见Exit Code含义:

    1    → 通用错误
    2    → shell内建命令使用错误
    3-124 → 程序特定错误
    125   → 内存溢出
    126   → 命令无法执行
    127   → 命令未找到
    128   → exit参数无效
    129-255 → 信号终止(实际信号值 = Exit Code - 128)

二、常见作业终止原因及Exit Code

  1. 资源限制相关:

    0:9   → 作业被取消
    0:15  → 作业被取消或超时
    0:53  → 文件/目录权限错误
    0:125 → 内存耗尽
  2. 信号终止相关:

    137 (128+9)  → 超出时间限制(SIGKILL)
    139 (128+11) → 段错误(SIGSEGV)
    140 (128+12) → 超出墙钟时间限制

三、系统信号(Signal)分类

  1. 程序终止信号:

    SIGHUP(1)   → 终端断开或控制进程终止
    SIGINT(2)   → 用户中断(Ctrl+C)
    SIGQUIT(3)  → 用户退出(Ctrl+\)
    SIGKILL(9)  → 强制终止(不可捕获)
    SIGTERM(15) → 请求正常终止
  2. 程序错误信号:

    SIGILL(4)   → 非法指令
    SIGTRAP(5)  → 调试断点
    SIGABRT(6)  → 异常终止
    SIGBUS(7)   → 内存访问错误
    SIGFPE(8)   → 浮点运算错误
    SIGSEGV(11) → 无效内存引用
  3. 进程控制信号:

    SIGCHLD(17)  → 子进程状态改变
    SIGCONT(18)  → 恢复被停止的进程
    SIGSTOP(19)  → 停止进程执行
    SIGTSTP(20)  → 终端停止(Ctrl+Z)
    SIGTTIN(21)  → 后台读取终端
    SIGTTOU(22)  → 后台写入终端
  4. 资源和定时器信号:

    SIGALRM(14)   → 定时器到期
    SIGXCPU(24)   → CPU时间超限
    SIGXFSZ(25)   → 文件大小超限
    SIGVTALRM(26) → 虚拟定时器到期
    SIGPROF(27)   → 性能分析定时器到期
  5. 系统和IO信号:

    SIGPIPE(13)   → 管道断开
    SIGSTKFLT(16) → 协处理器栈错误
    SIGURG(23)    → 套接字紧急情况
    SIGWINCH(28)  → 终端窗口大小改变
    SIGIO(29)     → 异步IO事件
    SIGPWR(30)    → 电源异常
    SIGSYS(31)    → 无效系统调用
  6. 实时信号:

    SIGRTMIN+n(34-49) → 较低优先级实时信号
    SIGRTMAX-n(50-64) → 较高优先级实时信号

四、调试

  1. 信号使用建议:

    - 调试:关注4、5、7、8、11号信号
    - 进程管理:使用1、2、9、15、18、19号信号
    - 守护进程:处理1、17号信号
    - 性能优化:关注24-27号信号
    - 自定义处理:使用实时信号(34-64)
  2. 文件操作建议:

    推荐使用rsync -rlt进行文件移动或复制
    可选参数:--remove-source-files(复制后删除源文件)

Leave a comment

Your email address will not be published. Required fields are marked *