
kill是Linux系统中用于向进程发送信号的标准命令。尽管名称直译为“杀死”,但kill的功能远不止于终止进程——它可以向进程发送各种信号,用于优雅停止、强制终止、重新加载配置、暂停或恢复进程等操作。
kill通过进程ID(PID)定位目标进程,而它的变体命令killall和pkill则可以通过进程名或其他属性进行匹配。信号是Linux进程间通信的基本方式之一,掌握kill命令是进行进程管理和故障排查的核心技能。
1. 基本语法
| 命令 | 说明 |
|---|
kill PID | |
kill -9 PID | |
kill -1 PID | |
kill -l | |
kill -0 PID | |
kill -s SIGTERM PID | |
2. 常用信号参考
| 信号 | 编号 | 说明 |
|---|
SIGHUP | | 重新加载配置——大多数守护进程在不重启的情况下重新读取配置 |
SIGINT | | |
SIGQUIT | | |
SIGKILL | | |
SIGTERM | | |
SIGUSR1 | | |
SIGUSR2 | | |
SIGCONT | | |
SIGSTOP | | |
SIGTSTP | | |
3. 按PID终止进程
| 命令 | 说明 |
|---|
kill 1234 | |
kill -9 1234 5678 | |
kill -HUP 1234 | |
kill -STOP 1234 | |
kill -CONT 1234 | |
kill -9 $(pidof firefox) | |
kill -USR1 1234 | |
4. killall:按名称终止
killall根据进程名终止所有匹配的进程:
| 命令 | 说明 |
|---|
killall nginx | |
killall -9 nginx | |
killall -HUP nginx | |
killall -u zhangsan | |
killall -u zhangsan firefox | |
killall -v firefox | |
killall -r "python.*" | |
killall -I FIREFOX | |
killall -w firefox | |
5. 后台作业管理
在当前Shell会话中管理后台作业:
| 命令 | 说明 |
|---|
jobs | |
kill %1 | |
kill -9 %1 | |
kill %+ | |
kill %% | |
kill %?python | |
6. 进程查找与终止组合
| 命令 | 说明 |
|---|
kill -9 $(pgrep -f "python app.py") | |
ps aux | grep nginx | awk '{print $2}' | xargs kill -9 | |
pidof mysqld | xargs kill -15 | |
pkill -f "node server.js" | |
sudo kill -9 $(lsof -t -i:8080) | |
7. 信号使用场景
| 信号 | 典型使用场景 |
|---|
SIGHUP (1) | Nginx、Apache、sshd等服务重载配置;终端断开时自动发送 |
SIGINT (2) | |
SIGKILL (9) | 进程无响应、僵尸进程、无法用SIGTERM停止时使用 |
SIGTERM (15) | |
SIGUSR1/2 | 日志轮转(如nginx)、状态报告(如dd)、自定义行为 |
SIGSTOP (19) | |
SIGCONT (18) | |
SIGQUIT (3) | |
8. 信号列表查看
| 命令 | 说明 |
|---|
kill -l | |
kill -l 9 | |
kill -l KILL | |
trap -l | |
man 7 signal | |
9. 实用组合模式
| 命令 | 说明 |
|---|
kill -0 PID && echo "进程存在" || echo "进程不存在" | |
for pid in $(pgrep java); do kill -15 $pid; done | |
killall -q process 2>/dev/null || echo "进程不存在" | |
(sleep 5 && kill -9 PID) & | |
sudo kill -9 $(ps aux | grep defunct | awk '{print $2}') | |
10. 常用选项
11. killall常用选项
12. 故障排查
| 问题 | 解决方法 |
|---|
| 进程在SIGTERM后未停止 | 等待几秒,进程可能正在清理;若仍无响应,升级到kill -9 |
| No such process | PID已退出;使用ps -p PID验证是否还存在 |
| Operation not permitted | |
| SIGKILL没有效果 | 进程处于不可中断睡眠(D状态),可能由I/O问题引起,只能重启系统 |
| 不确定要终止哪个PID | 先用pidof name、pgrep name或ps aux | grep name查看 |
| killall: no process found | |
| 后台作业无法终止 | 使用jobs确认作业编号;作业可能已停止,先fg再操作 |
| 信号发送后无反应 | 确认进程是否正确处理信号;某些信号对守护进程含义不同 |
温馨提示: 优雅停止(SIGTERM)优先于强制终止(SIGKILL)。在生产环境中,应先尝试kill PID,给进程清理资源的机会,避免数据损坏。对于服务进程,SIGHUP通常用于重载配置而不中断服务。使用killall和pkill时要小心,确保进程名匹配正确,避免误终止其他进程。在脚本中使用时,建议先检查进程是否存在再发送信号。
关注公众号(haopython),请回复: LLTKILL