三者分工
| 命令 |
作用 |
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 收养)