首页/系统/Linux 运维命令速查/pkill 按条件杀进程
进程与作业69 条

pkill 按条件杀进程

pgrep 的杀进程版本:pkill -f 模式、-u 用户、-9 强杀;批量清理同类进程一条命令,但请先 pgrep 核对。

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

pkill 是什么

pkill 与 pgrep 出自同一套匹配逻辑(procps-ng):pgrep 把命中的进程列出来,pkill 直接把信号发过去。默认匹配进程名(内核里的 comm,最长 15 个字符),加 -f 则匹配完整命令行。它不做任何交互确认,命中即发信号,所以正确用法是「先用 pgrep 同参数预览命中列表,再执行 pkill」。

基本信息

适用平台Linux(procps-ng;多数发行版自带)
命令语法pkill [选项] 模式
匹配范围默认匹配进程名;-f 匹配完整命令行;-x 要求全字相等;-u 限定属主
常用信号默认 -TERM(15) 请求退出;-9(SIGKILL) 强杀;-HUP 常用于让守护进程重载配置
退出码0 至少命中一个进程 / 1 未命中 / 2 语法错误 / 3 致命错误
安全习惯先 pgrep -af 用同参数预览,确认无误再原样换成 pkill

典型使用场景

  • 批量重启同类进程:pkill 后由守护进程或脚本重新拉起
  • 清理跑飞的调试进程:用 -u 限定用户,避免误伤他人进程
  • 让服务重载配置:发 -HUP,但支持重载的才可用,正规做法仍是 reload
  • 任务收尾:批处理结束后清理遗留的 curl、python 子进程
  • 发布脚本里收口:先停旧进程、确认退出、再启新版本

常用示例

常用示例
pgrep -af 'node worker'          # 1. 先预览命中列表(-a 显示完整命令行)
pkill -f 'node worker'           # 2. 确认无误后执行,默认发 TERM
pkill -u deploy -f 'python app'  # 限定属主,缩小误伤范围
pkill -e -f 'ab-test'            # -e 打印实际被杀的进程,便于留痕
pkill -x nginx                   # -x 全字匹配进程名,避免误伤同名变体
pkill -HUP -f 'myapp'            # 发 HUP 让进程重载配置(是否支持取决于程序)
pgrep -af -u deploy 'python'     # 复查是否还有残留

常用选项与匹配对象

选项匹配对象注意
(默认)进程名 comm,最长 15 字符名字被截断时同名进程会被一起命中,建议改用 -f
-f完整命令行,含全部参数会匹配到命令行里含同串的 shell 或 ssh 自身,有自杀风险
-x要求模式与目标完全相等限制误伤最有效,常与 -f 组合使用
-u 用户限定进程属主多用户机器上必加
-e输出被杀进程的 pid 与名称脚本日志留痕用
pkill -f 的模式会匹配到「正在执行这条命令的 shell 自身」——它的命令行里同样包含这个字符串,存在自杀风险,在 SSH 会话里尤其明显。预览步骤不能省,必要时加 -x 或把模式写得足够独特。
pkill 只负责发信号,不等待进程退出。脚本里「杀掉后立刻重启」必须轮询确认进程确实消失(pgrep 返回 1),否则可能出现两个实例同时抢端口或锁文件。

易错点

  • -9 会跳过进程自身的清理逻辑,可能留下锁文件、半写数据与未落盘的缓冲;先发 TERM 等 5 到 10 秒再考虑 -9
  • 模式是扩展正则,含 . + ( ) 等字符时要么转义要么用 -x 精确匹配,否则命中范围会超出预期
  • 同一模式命中多个进程是常态:不看预览直接 pkill,可能把生产实例和调试实例一起杀掉
  • 进程名默认只匹配前 15 个字符,长名字的进程会「意外命中」多个,改用 -f 时又要防自杀
  • pkill 不等待退出,脚本里必须轮询确认后再生启,否则容易出现双实例争抢端口

数据来源与参考

  • man 1 pkill(procps-ng 手册)

相关工具

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