killall 按名批量杀
killall 来自 psmisc,按进程名匹配并给全部同名进程发信号,等价于把 pkill 的用法简化成「名字写在最后」。它默认发送 TERM(信号 15),可以用 -s 指定其他信号,例如给 nginx 发 HUP 让它重读配置。因为作用范围是「所有匹配名字的进程」,线上使用前务必用精确匹配与用户限定收窄范围。
基本信息
| 适用平台 | Linux(psmisc 包) |
|---|---|
| 语法 | killall [-s 信号] [-u 用户] [-e] [-i] [-w] 进程名 |
| 默认信号 | TERM(15),先请求优雅退出 |
| 命名限制 | 匹配的是 /proc/PID/comm,最长 15 个字符 |
典型使用场景
- 让 nginx 重读配置:killall -s HUP nginx
- 停止一组自己启动的测试进程,不动系统服务
- 清理批量跑起来的 python3 任务时用 -u 限定当前用户
- 等待进程退出后再执行下一步:killall -w 配合 TERM
- 脚本收尾阶段清理本次运行留下的辅助进程
常用示例
常用示例
killall -s HUP nginx # 给所有 nginx 发 HUP,重载配置
killall -i sleep # 每个匹配都交互确认一次
killall -w -s TERM worker # 发送 TERM 并等待其退出
killall -u deploy python3 # 限定用户,避免误杀 root 的任务
killall -e -q backup # 名称精确匹配,未命中时不报错
killall -l # 列出所有可用信号名
ps -ef | grep -c '[w]orker' # 执行前先确认将要命中的进程数量选项逐项读法
| 选项 | 作用 | 使用注意 |
|---|---|---|
| -s | 指定发送的信号 | HUP 重载、TERM 优雅退出、KILL 不可被捕获 |
| -e | 要求名称完全精确匹配 | 默认会匹配名字更长的进程,线上建议加上 |
| -i | 逐个交互确认 | 交互式清理时防止误杀 |
| -u | 限定属主用户 | 多用户机器上的必备保险 |
| -w | 等待进程退出后再返回 | 依赖退出顺序的脚本要用 |
| -q | 没有任何匹配时不报错 | 定时任务里避免噪声告警 |
被 systemd 管理的服务不要用 killall 停:进程退出后很快会被自动拉起,看起来像「杀不掉」,正确做法是 systemctl stop 或 restart。
不同平台的 killall 语义差异极大:Linux 上是 psmisc 的按名杀进程,Solaris 系历史上是「杀掉所有可见进程」。跨平台脚本不要依赖 killall。