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 回收。