概述
- 以下是Linux
kill
命令的详细教程,包含信号机制、常用信号、命令语法及实战技巧 - 资料已经分类整理好:
https://pan.quark.cn/s/26d73f7dd8a7
1. 基本概念与语法
kill
命令用于向进程发送信号,默认发送终止信号(SIGTERM
,编号15)。
核心语法:
kill [选项] [信号] 进程ID(PID)
常用选项:
选项 | 作用 |
---|---|
-l | 列出所有可用信号 |
-s | 指定信号名称或编号 |
-n | 直接使用信号编号(如 -9 ) |
2. 信号机制详解
2.1 信号分类
Linux系统有64种信号(编号1-64),常见分为两类:
- 标准信号(1-31):不可靠信号,可能丢失。
- 实时信号(32-64):可靠信号,不会丢失。
2.2 常用信号列表
信号编号 | 信号名称 | 作用 |
---|---|---|
1 | SIGHUP | 终端挂起或控制进程终止 |
2 | SIGINT | 键盘中断(Ctrl+C) |
3 | SIGQUIT | 键盘退出(Ctrl+\) |
9 | SIGKILL | 强制终止进程(不可捕获) |
15 | SIGTERM | 正常终止进程(默认,可捕获) |
18 | SIGCONT | 继续运行暂停的进程 |
19 | SIGSTOP | 暂停进程(不可捕获) |
20 | SIGTSTP | 终端暂停(Ctrl+Z) |
3. 信号发送方式
3.1 使用信号名称
kill -s SIGTERM 1234 # 正常终止PID为1234的进程
kill -s SIGKILL 5678 # 强制终止PID为5678的进程
3.2 使用信号编号
kill -15 1234 # 等同于 kill -s SIGTERM 1234
kill -9 5678 # 等同于 kill -s SIGKILL 5678
3.3 向多个进程发送信号
kill -9 1234 5678 9012 # 同时终止多个进程
kill -SIGTERM $(pgrep nginx) # 终止所有nginx进程
3.4 向进程组发送信号
kill -15 -1234 # 终止PID为1234的进程及其所有子进程
4. 不同信号的应用场景
4.1 优雅终止:SIGTERM
(15)
- 作用:请求进程正常终止,进程可捕获该信号并执行清理操作(如保存数据、关闭连接)。
- 适用场景:大多数情况首选,避免数据丢失。
kill 1234 # 默认发送SIGTERM
4.2 强制终止:SIGKILL
(9)
- 作用:立即终止进程,不可被捕获或忽略,直接释放资源。
- 适用场景:进程无响应、陷入死循环或必须立即终止时。
kill -9 1234 # 强制终止进程
4.3 暂停与恢复
- 暂停进程:
kill -STOP 1234 # 暂停PID为1234的进程
- 恢复进程:
kill -CONT 1234 # 恢复运行PID为1234的进程
4.4 重新加载配置:SIGHUP
(1)
- 作用:常用于让进程重新读取配置文件而无需重启。
- 适用场景:Nginx、Apache等服务配置更新后。
kill -HUP $(pgrep nginx) # 重新加载nginx配置
5. 实战技巧
5.1 安全终止顽固进程
# 1. 先尝试正常终止
kill 1234
sleep 2 # 等待2秒# 2. 若未终止,发送警告信号
kill -1 1234
sleep 2# 3. 仍未终止,强制杀死
kill -9 1234
5.2 终止指定用户的所有进程
kill -9 $(ps -u username -o pid=) # 终止用户username的所有进程
5.3 终止包含特定名称的进程
# 方法1:结合pgrep
kill -9 $(pgrep -f "python script.py") # 终止包含"python script.py"的进程# 方法2:结合ps和grep
ps aux | grep "java app.jar" | grep -v grep | awk '{print $2}' | xargs kill -9
5.4 批量终止进程组
pkill -9 -P 1234 # 终止PID为1234的所有子进程
6. 注意事项
- 慎用SIGKILL:
- 可能导致数据丢失(如文件未保存)。
- 无法清理资源(如临时文件、数据库锁)。
- 僵尸进程处理:
- 僵尸进程(
STAT=Z
)无法被SIGKILL
终止,需杀死其父进程释放资源。
- 僵尸进程(
- 系统关键进程:
- 避免杀死PID为1的
init
或systemd
进程,会导致系统崩溃。
- 避免杀死PID为1的
- 信号屏蔽:
- 某些进程可能屏蔽特定信号(如数据库服务屏蔽
SIGTERM
),需查阅文档确认。
- 某些进程可能屏蔽特定信号(如数据库服务屏蔽
7. 总结
kill
命令的核心是理解信号机制,根据场景选择合适的信号:
- 优雅终止:优先使用
SIGTERM
(默认)。 - 强制终止:使用
SIGKILL
作为最后手段。 - 进程控制:使用
SIGSTOP
和SIGCONT
暂停/恢复进程。 - 配置重载:使用
SIGHUP
让服务重新加载配置。
结合ps
、pgrep
等命令,可高效定位并管理系统进程,是Linux运维的必备技能。