信号语义是什么
信号是进程间通信手段,也是停服的语义基础。终止请求信号可被捕获,中断信号等同终端里的 Ctrl+C,挂断信号常被守护进程用作重载配置,退出信号在部分服务里表示优雅停止,而强制信号无法被捕获、由内核直接回收进程。
基本信息
| 适用平台 | Linux / Unix |
|---|---|
| 命令语法 | kill [-信号] PID;按进程名可用 pkill 或 killall |
| 常用信号 | HUP(1)、INT(2)、QUIT(3)、TERM(15)、KILL(9),USR1 与 USR2 由应用自定义 |
| 查看方式 | man 7 signal 查语义,kill -l 列出全部信号编号 |
典型使用场景
- 优雅停服:先发终止请求,让进程收尾、关闭连接、把数据落盘
- 重载配置:很多守护进程用挂断信号触发重新读取配置
- 强制回收:进程卡死或忽略终止请求时才使用强制信号
- 重开日志:用户自定义信号在部分程序里表示重新打开日志文件
- 脚本收尾:先发信号再轮询确认,比直接强杀更安全
常用示例
常用示例
kill -TERM 1234 # 请求进程退出(kill 的默认信号)
kill -HUP 1234 # 很多守护进程据此重载配置
kill -INT 1234 # 等同于终端里的 Ctrl+C
kill -QUIT 1234 # 部分服务(如 nginx)表示优雅停止
kill -9 1234 # 内核强制回收,进程没有清理机会
kill -l # 列出全部信号名与编号
kill -0 1234 && echo alive # 只探测进程是否存在,不发送信号信号语义对照
| 信号 | 语义 | 典型用途 |
|---|---|---|
| TERM(15) | 请求退出,可被捕获 | 默认的优雅停止手段 |
| INT(2) | 中断,等价 Ctrl+C | 交互式终止 |
| HUP(1) | 挂断,常被重载实现复用 | 重读配置、重开日志 |
| QUIT(3) | 退出并可能生成 core | 部分服务用作优雅停止 |
| KILL(9) | 不可捕获,内核直接回收 | 最后手段,无清理机会 |
| USR1 与 USR2 | 应用自定义 | 如重开日志、切换运行状态 |
停服标准流程:先发终止请求,等待 5 到 10 秒,仍存活再评估(可能处于不可中断状态或卡死),最后才考虑强制信号。
挂断信号的实际语义取决于应用:有的重载配置,有的直接退出,动手前查看该程序的文档。
信号 0 只做存在性探测,不发送任何信号,常用于脚本中判断进程是否还在。