首页/系统/信创系统运维速查/进程信号:kill 常用信号与批量处理
服务与运维65 条

进程信号:kill 常用信号与批量处理

kill 默认发 TERM 优雅退出,KILL(9) 强杀仅在兜底时用;pkill/pgrep 按名称或命令行批量处理,kill -0 可判断进程是否存在。

信创系统运维速查系统更新于 2026-10-13

信号与 kill 的关系

kill 命令的名字容易误导:它真正做的事是给进程发信号,终止只是其中一种信号的效果。进程收到信号后可以自己决定怎么处理,所以优雅退出与强制终止的区别就在信号选择上。默认发送的终止信号让进程有机会保存状态、释放锁、刷盘并正常退出;强制终止信号则直接由内核结束进程,不给任何清理机会。理解这个差别,配合进程查找与判断手段,才能既停掉该停的东西又不制造脏数据。

基本信息

所属procps 提供的 kill、pkill、pgrep
语法kill [-信号] 进程号;pkill [-信号] 匹配条件
默认信号终止信号,允许进程做清理
强制信号编号 9,内核直接结束进程,无清理机会
重载信号编号 1,部分守护进程据此重读配置
适用平台Kylin V10 / UOS / openEuler 通用

典型使用场景

  • 停掉卡死的进程:先发终止信号观察,确认无效后再考虑强制信号
  • 被 systemd 托管的服务出问题时:改用 systemctl stop,让 systemd 按超时机制收尾
  • 批量处理同类进程:按命令行特征匹配,一次停掉所有异常实例
  • 让服务重读配置:支持重载信号的服务可据此生效新配置而不断连接
  • 判断进程是否存活:用信号编号 0 探测,只看退出码不产生副作用
  • 排障时锁定目标:先列出匹配清单再动手,避免误伤无关进程

常用信号与操作

常用信号与操作
kill -TERM 12345                      # 优雅终止,优先使用
kill -HUP 12345                       # 通知重载配置,需程序自身支持
kill -9 12345                         # 强制终止,最后手段
pgrep -a -f myapp                     # 先列出匹配的进程与完整命令行
pkill -TERM -f '/opt/myapp/bin/myapp' # 按完整路径匹配后批量终止
kill -0 12345 && echo alive           # 探测进程是否存在
systemctl stop myapp                  # systemd 托管服务的规范停法

常用信号读法

信号编号作用与使用场景
终止15默认信号,允许进程清理后退出
强制终止9内核直接结束,可能有残留锁与临时文件
重载1常用于让守护进程重读配置
中断2相当于终端里的中断操作
查询0不发送信号,仅探测进程是否存在
强制终止之后,进程没有机会清理锁文件、临时文件和未落盘数据,数据库或消息队列类进程被强杀可能导致下次启动需要恢复。被 systemd 托管的进程尽量用 systemctl stop,由 systemd 按超时策略发送终止信号并在必要时升级强制终止。
按名称批量处理时,匹配条件要尽量精确到完整路径或唯一特征。只写一个通用的关键字会命中大量无关进程,后果往往比不做处理更严重。先用列出命令确认命中清单,是这类操作的标准前置动作。

易错点

  • pkill 的匹配条件过宽(只写一个短关键字),把无关进程一起杀掉,业务中断且难以复盘
  • 手工强制终止被 systemd 托管的进程,触发自动重启,形成进程反复上下线,问题被掩盖
  • 习惯性直接使用强制终止,导致锁文件与临时数据残留,下次启动需要人工清理
  • 以为信号发出就一定会生效:被阻塞或处于不可中断状态的进程可能不响应,需要先确认进程状态

数据来源与参考

  • man 1 kill
  • man 1 pkill
  • man 7 signal
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌