060 kill命令

命令说明

kill 向进程发送信号以终止或控制其运行,默认发 SIGTERM(15)请求优雅退出,强杀用 SIGKILL(9);它“杀”的是信号投递,并非只有终止用途。

语法

kill [信号] PID...
kill -l  # 列出信号

常用参数

参数说明
-l列出全部信号名称与编号
-1 / -HUP挂起/重载配置(nginx、keepalived 常用)
-2 / -INT等同 Ctrl+C 中断
-9 / -KILL强制杀死,进程无法捕获与清理(最后手段)
-15 / -TERM默认信号,请求优雅退出,可被捕获做清理
-18 / -CONT恢复被停止的进程
-19 / -STOP暂停进程(不退出,冻结调度)
PID...可同时给多个 PID 发信号
-u 用户bash 内置 kill 可按用户批量发信号(谨慎)

使用示例

$ kill 12345

对 12345 发送默认 SIGTERM 请求退出

$ kill -9 12345

SIGTERM 无效时强杀

$ kill -HUP $(cat /var/run/nginx.pid)

平滑重载 nginx 配置

$ kill -l

查看信号列表与编号

$ ps -ef | grep java | grep -v grep | awk "{print $2}" | xargs kill

按名称批量找 PID 再杀

$ killall nginx

按进程名杀(需 psmisc 包)

$ pkill -f "app.jar"

按命令行模式匹配杀进程

$ kill -STOP 12345; kill -CONT 12345

暂停再恢复进程(压测隔离用)

实用技巧

  • 先 15 后 9:直接 -9 会让进程来不及释放临时文件、锁与共享内存,造成数据损坏或残留;给优雅退出留几秒再考虑强杀。
  • kill -9 也杀不掉的进程:多半处于 D 状态(不可中断睡眠,等 IO/NFS),只能修复底层 IO 或重启,ps 里看 STAT 列。
  • PID 1(systemd/init)受保护,普通 kill 无效;误杀用户会话进程用 pkill -u 比 kill 全部 PID 安全。
  • bash 的 kill 是内置命令(jobs 用 %1 作业号),/bin/kill 是外部程序,脚本中行为略有差异。
  • kill 与 rm 一样会受 alias 影响吗?不会,但要确认 PID 正确:ps -fp PID 先看再杀。
  • 僵尸进程(Z 状态)kill 无效,需处理其父进程或让父进程 wait 回收。