首页/系统/Linux 运维命令速查/信号语义与优雅停服
进程与作业69 条

信号语义与优雅停服

理解信号才能正确停服:TERM 请求退出(可被捕获)、INT 同 Ctrl+C、HUP 常被守护进程当作 reload、KILL 无法捕获。

Linux 运维命令速查系统更新于 2026-10-13

信号语义是什么

信号是进程间通信手段,也是停服的语义基础。终止请求信号可被捕获,中断信号等同终端里的 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 只做存在性探测,不发送任何信号,常用于脚本中判断进程是否还在。

易错点

  • 挂断信号的语义由应用决定,有的是重载有的是退出,想当然使用可能造成服务中断
  • 强制信号后端口可能仍被等待状态或残留子进程占用,直接重启会报地址已被占用
  • 脚本里只发信号不等待退出,紧接着启动新进程会撞端口,应轮询确认旧进程已消失
  • 只对主进程发信号会留下子进程,需要时对整组发送并注意不要误伤同组其他进程

数据来源与参考

  • man 7 signal(Linux man-pages 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌