kill针对单个pid精准控制,killall按进程名批量终止;前者用于已知pid的优雅或强制终止,后者适用于清理所有同名进程,二者不可混用。

kill 和 killall 都能终止进程,但作用对象和使用场景完全不同:kill 针对单个进程 ID(PID),而 killall 针对进程名,会批量终止所有同名进程。
kill 命令:精准控制单个进程
它通过向指定 PID 发送信号来影响进程行为,默认发 SIGTERM(15),允许进程优雅退出、释放资源。只有在进程无响应时,才考虑用 -9(SIGKILL) 强制终止。
- 先查 PID:常用
ps -ef | grep name或更简洁的pidof name - 正常终止:
kill 1234(等价于kill -15 1234) - 强制终止:
kill -9 1234—— 不清理临时文件、不保存状态,慎用 - 其他实用信号:
kill -STOP 1234暂停,kill -CONT 1234恢复,kill -HUP 1234重载配置(如 nginx、sshd)
killall 命令:按名称批量终止
它不依赖 PID,直接匹配进程名(注意是完整可执行文件名,不是命令别名或路径)。适合快速清理所有同名实例,比如多个后台运行的脚本或服务。
- 基本用法:
killall firefox终止所有名为 firefox 的进程 - 加信号更安全:
killall -TERM nginx先尝试优雅退出;killall -9 nginx强制结束 - 注意大小写和精确匹配:默认区分大小写;加
-I可忽略大小写,加-e要求完全匹配(避免误杀如httpd杀掉httpd-worker) - 交互确认更稳妥:
killall -i python3会逐个询问是否终止
关键区别与避坑提醒
两者不能混用,选错会导致误操作:
-
kill firefox是错误的——firefox 不是 PID,系统会报 “No such process” -
killall 1234同样无效——1234 是数字,不是进程名;killall 会去查找叫 “1234” 的程序,通常找不到 - 权限限制:普通用户只能终止自己启动的进程;root 才能终止系统级进程
- 进程名 ≠ 启动命令:运行
python3 myapp.py,进程名通常是python3,不是myapp.py;可用ps -o pid,comm,args查看真实进程名(comm 列)
什么时候该用哪个?
看目标是否明确:
- 知道确切 PID(比如 top 里看到某个 CPU 占用异常的进程号)→ 用
kill - 想清空所有某类程序(如关掉全部 chrome 实例、重启全部 node 服务)→ 用
killall - 不确定进程名是否准确,或担心误杀 → 先用
pgrep -f "keyword"或ps aux | grep keyword确认再行动










