首页 > Sysadmin > 正文

Linux top 杀死进程:交互式操作与信号

huyuanwen 2026-11-04 Sysadmin

草稿待审 — 未实测:top 交互式 k 命令在非交互环境的自动化行为;WSL2 下 systemd 自动重启行为。

在 top 里按 k 可以直接给进程发信号,默认 TERM,适合快速处理僵死或吃资源的进程。

top 内交互式杀进程

运行 top 后,按 k 进入杀进程模式。顶部输入行会提示 PID 和 signal,默认 PID 是当前高亮行,默认信号是 SIGTERM (15)[1][2][3][4]。

# 启动 top
top

# 按 k
# 输入 PID(回车 = 当前高亮行)
# 输入信号(回车 = SIGTERM)
# 回车确认发送
  • 直接回车采用当前高亮进程的 PID
  • 信号可填名称或数字,SIGTERM / 15 / TERM 均可
  • 一次只能发给一个 PID;批量处理用 kill 或 pkill 更高效

信号选择与风险

top 提示里的默认信号是 SIGTERM (15)。该信号可被进程捕获,允许它先做清理再退出[2]。

常用信号:

  • SIGTERM (15):请求终止,优先使用
  • SIGKILL (9):强制终止,进程无法捕获,不留清理时间
  • SIGHUP (1):挂起信号,常用于让守护进程重读配置
# top 里发送 SIGKILL 的输入示例
PID: 12345
signal: 9

不要默认用 SIGKILL。数据库、日志服务等需要刷盘或断连接,SIGTERM 才是稳妥选择。只有 TERM 无效时才升级到 KILL。

非交互式替代:kill 命令

如果已经知道 PID,脚本或远程 SSH 里直接用 kill 更高效[2]。

# 发送 SIGTERM
kill 12345

# 直接发 SIGKILL
kill -9 12345

# 按名称批量杀
pkill -f nginx

# 查看信号列表
kill -l

kill -0 <PID> 只检查进程是否存在,不发送任何信号,常用于条件判断。

回滚

  • 误杀后若进程有 supervisor/systemd,它会自动重启
  • 手动重启示例:systemctl restart nginx
  • 被杀进程若持有临时文件或锁,重启前检查 /var/run/ 和 /tmp/

排错速查

现象 原因 处理
top 里按 k 无反应 普通用户在 secure mode 下被限制 用 root 或去掉 /etc/toprc
kill: (12345) – Operation not permitted 权限不足或 PID 属于其他用户 加 sudo 或改信号
进程 TERM 后不退出 进程屏蔽了 SIGTERM 确认后改发 SIGKILL
No such process PID 已消失 用 pidof 或 pgrep 重新确认

实测与局限性

  • 实测环境:WSL2 Ubuntu 24.04,procps 2:4.0.3-1ubuntu1
  • 已验证:top k 交互发送 SIGTERM 和 SIGKILL、kill -l 列表、kill -0 检测、pkill -f 按名杀进程、kill -TERM 成功终止 sleep 进程
  • 局限性:top 交互式模式无法在纯 cron/管道里自动化发送信号;WSL2 无法完整模拟 systemd 重启行为;容器内 PID namespace 隔离需注意命名空间边界。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。