【合集】Linux——31个普通信号
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文件 |
关键特性说明
-
不可拦截信号:
SIGKILL
(9)和SIGSTOP
(19)无法被捕获、阻塞或忽略,是系统强制控制进程的终极手段。 -
核心转储(Core Dump):
信号如SIGSEGV
、SIGABRT
触发时默认生成core文件(需系统配置允许),用于事后调试定位崩溃原因 -
进程控制信号组:
- 停止进程:
SIGSTOP
、SIGTSTP
、SIGTTIN
、SIGTTOU
- 恢复进程:
SIGCONT
- 停止进程:
-
用户自定义信号:
SIGUSR1
(10)和SIGUSR2
(12)无预设行为,需程序主动注册处理函数以实现自定义逻辑(如热重载配置) -
异步安全警告:
信号处理函数(Handler)中只能调用异步信号安全函数(如write()
、_exit()
),避免使用malloc()
或printf()
等非安全函数
常见应用场景
- 服务优雅退出:捕获
SIGTERM
(15)释放资源后退出 - 子进程回收:处理
SIGCHLD
(17)避免僵尸进程 - 调试定位崩溃:分析
SIGSEGV
(11)生成的core文件 - 定时任务控制:通过
SIGALRM
(14)实现超时机制