三者分工

命令 作用
pgrep 按名字 / 模式找 PID(不杀)
pkill 按名字 / 模式直接发信号
killall 按精确进程名杀(参数略不同)

pgrep:找 PID

pgrep nginx                       # 列出所有 nginx 的 PID
pgrep -l nginx                    # PID + 名字
pgrep -a nginx                    # 完整命令行
pgrep -u alice                    # alice 的所有进程
pgrep -f "python myapp.py"        # 按完整命令行匹配
pgrep -c nginx                    # 计数
pgrep -n nginx                    # 最新启动的
pgrep -o nginx                    # 最早启动的

pkill:直接杀

pkill nginx                       # 杀所有 nginx
pkill -9 nginx                    # 强杀
pkill -HUP nginx                  # 发 HUP(重载配置)
pkill -u alice                    # 杀 alice 所有进程
pkill -f "python myapp.py"        # 按完整命令行
pkill -P 1234                     # 杀 PPID=1234 的子进程

killall:按精确名

killall nginx                     # 杀所有叫 nginx 的
killall -9 stuck-app
killall -u alice                  # alice 的所有
killall -i nginx                  # 杀前问确认
killall -w nginx                  # 等进程真退出

几个差别

维度 killall pkill
匹配 精确进程名 默认子串(更激进)
-f 完整命令行
信号默认 TERM TERM
阻塞等待 -w
普及度 多数发行版有 多数发行版有

实战

# 看 nginx 多少个进程
pgrep -c nginx

# 给所有 nginx 发 HUP 重载
pkill -HUP nginx

# 杀掉 stale 的 python 任务(按命令行匹配)
pkill -9 -f "python old_script.py"

# 等所有 mysql 进程真退出
killall -w mysqld

# 杀一个用户所有
sudo pkill -u baduser

⚠ 慎用 -f

pkill -f "data"                   # 危险!可能杀掉任何带 "data" 的命令

-f 是按完整命令行模糊匹配——用前 pgrep -af 先看会匹配到啥

  • killall systemd 在某些系统可能杀掉 PID 1 导致系统挂——别瞎用
  • 多用户共享机器 pkill -u alice 要确认是你管的范围
  • 进程 fork 出子进程时,杀父进程子进程会变孤儿(被 init 收养)