【合集】Linux——31个普通信号

发布于:2025-05-31 ⋅ 阅读:(23) ⋅ 点赞:(0)

Linux普通信号总表(1-31)​

编号 信号名 触发原因 默认动作
1 SIGHUP 终端连接断开(如SSH会话终止)或守护进程重载配置(如nginx -s reload 终止进程
2 SIGINT 用户输入Ctrl+C中断前台进程 终止进程
3 SIGQUIT 用户输入Ctrl+\退出进程 终止并生成core文件
4 SIGILL 执行非法CPU指令(如不支持的指令集) 终止并生成core文件
5 SIGTRAP 调试断点或陷阱指令触发(由GDB等调试器使用) 终止并生成core文件
6 SIGABRT 调用abort()函数或断言失败(如assert() 终止并生成core文件
7 SIGBUS 内存对齐错误(如访问非对齐地址) 终止并生成core文件
8 SIGFPE 算术异常(如除零、浮点溢出) 终止并生成core文件
9 SIGKILL kill -9强制终止进程(不可被捕获、阻塞或忽略 立即终止
10 SIGUSR1 用户自定义信号1(需程序主动处理) 终止进程
11 SIGSEGV 非法内存访问(如空指针解引用、缓冲区溢出) 终止并生成core文件
12 SIGUSR2 用户自定义信号2 终止进程
13 SIGPIPE 向无读端的管道或Socket写入数据(如网络连接断开后继续发送) 终止进程
14 SIGALRM 定时器到期(由alarm()setitimer()设置) 终止进程
15 SIGTERM 默认终止信号(kill不加参数时发送),允许进程清理资源 终止进程
16 SIGSTKFLT 协处理器栈错误(现代Linux中极少使用) 终止进程
17 SIGCHLD 子进程终止或停止时通知父进程(默认忽略,需主动回收僵尸进程) 忽略
18 SIGCONT 恢复被暂停的进程(如fg命令) 继续执行
19 SIGSTOP 暂停进程(不可被捕获、阻塞或忽略Ctrl+Z实际触发SIGTSTP 停止进程
20 SIGTSTP 终端暂停信号(Ctrl+Z 停止进程
21 SIGTTIN 后台进程尝试读取终端输入 停止进程
22 SIGTTOU 后台进程尝试向终端输出 停止进程
23 SIGURG Socket收到带外数据(OOB) 忽略
24 SIGXCPU 进程CPU时间超限(由setrlimit()设置) 终止并生成core文件
25 SIGXFSZ 文件大小超限(如写入超过ulimit限制) 终止并生成core文件
26 SIGVTALRM 虚拟计时器到期(统计进程占用CPU时间) 终止进程
27 SIGPROF 性能分析计时器到期(统计CPU及系统调用时间) 终止进程
28 SIGWINCH 终端窗口大小变化(如调整xterm窗口) 忽略
29 SIGIO 异步I/O事件就绪(需配合fcntl()设置) 终止进程
30 SIGPWR 电源故障(由UPS或系统监控进程发送) 终止进程
31 SIGSYS 无效系统调用(如调用不存在的syscall) 终止并生成core文件

关键特性说明

  1. 不可拦截信号​:
    SIGKILL(9)和SIGSTOP(19)​无法被捕获、阻塞或忽略​,是系统强制控制进程的终极手段。

  2. 核心转储(Core Dump)​​:
    信号如SIGSEGVSIGABRT触发时默认生成core文件(需系统配置允许),用于事后调试定位崩溃原因

  3. 进程控制信号组​:

    • 停止进程​:SIGSTOPSIGTSTPSIGTTINSIGTTOU
    • 恢复进程​:SIGCONT
  4. 用户自定义信号​:
    SIGUSR1(10)和SIGUSR2(12)无预设行为,需程序主动注册处理函数以实现自定义逻辑(如热重载配置)

  5. 异步安全警告​:
    信号处理函数(Handler)中只能调用异步信号安全函数​(如write()_exit()),避免使用malloc()printf()等非安全函数


常见应用场景

  • 服务优雅退出​:捕获SIGTERM(15)释放资源后退出
  • 子进程回收​:处理SIGCHLD(17)避免僵尸进程
  • 调试定位崩溃​:分析SIGSEGV(11)生成的core文件
  • 定时任务控制​:通过SIGALRM(14)实现超时机制