Linux kill 与 killall 命令正确使用方法

7次阅读

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

Linux kill 与 killall 命令正确使用方法

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 确认再行动
text=ZqhQzanResources