Linux 进程信号控制(kill/killall/pkill)核心总结
一、信号(Signal)核心概念
- 本质:发给进程的软件中断,用于报告事件(错误/外部操作),控制进程行为(终止/暂停/重启);
- 分类:Term(立即关闭)、Core(核心转储后终止)、Stop(暂停,可恢复);
- 指定方式 :支持名称(
-HUP/-SIGHUP)或编号(-1/-9),名称大小写不敏感。
二、常用信号速查表
| 编号 | 短名称 | 完整名称 | 核心作用 | 特点 | 触发方式/典型场景 |
|---|---|---|---|---|---|
| 1 | HUP | SIGHUP | 重新加载配置 | 不终止进程,仅重读配置 | kill -1 进程PID(重启Nginx/Httpd配置) |
| 2 | INT | SIGINT | 键盘中断终止 | 可被进程拦截/忽略 | Ctrl+C(终端终止前台进程) |
| 3 | QUIT | SIGQUIT | 核心转储后终止 | 生成内存映像(core文件),便于排错 | Ctrl+\(终端触发) |
| 9 | KILL | SIGKILL | 强制终止进程 | 无法拦截/忽略,立即杀死(最强制) | kill -9 进程PID(杀死无响应进程) |
| 15 | TERM | SIGTERM | 正常终止进程 | 默认信号,允许进程清理资源 | kill 进程PID(不加信号默认TERM) |
| 18 | CONT | SIGCONT | 恢复暂停进程 | 配合19/20使用 | kill -18 进程PID(恢复Ctrl+Z暂停的进程) |
| 19 | STOP | SIGSTOP | 强制暂停进程 | 无法拦截/忽略 | kill -19 进程PID(强制暂停) |
| 20 | TSTP | SIGTSTP | 键盘暂停进程 | 可被拦截/恢复 | Ctrl+Z(终端暂停前台进程) |
三、进程信号操作命令(kill/killall/pkill)
1. kill(按PID发送信号,最基础)
-
核心语法 :
kill [-信号] 进程PID(无信号默认发15号TERM); -
关键参数 :
kill -l(列出所有信号的名称/编号); -
示例 :
bashkill -9 5199 # 强制杀死PID=5199的进程 kill -SIGTERM 5205 # 按名称发送终止信号(等价kill -15 5205) kill 5205 # 默认发15号信号,正常终止进程
2. killall(按进程名发送信号,批量操作)
-
核心语法 :
killall [-信号] 进程名(匹配命令名称批量处理); -
特点:无需查PID,直接按进程名操作,默认发15号TERM;
-
示例 :
bashkillall control # 终止所有名为control的进程(等价killall -15 control) killall -9 nginx # 强制杀死所有nginx进程
3. pkill/pgrep(按条件筛选+发送信号,精细化控制)
| 命令 | 核心作用 | 关键参数 | 示例 |
|---|---|---|---|
| pgrep | 按条件查找进程PID/名称 | -l(显示进程名+PID)、-u 用户名/UID(指定用户) |
pgrep -l -u bob(列出bob用户的所有进程名+PID) |
| pkill | 按条件发送信号给进程 | -U 用户名(指定用户)、-t 终端(指定终端)、-信号 |
pkill -U user(终止user用户的所有进程) pkill -9 -t pts/1(强制杀死pts/1终端的所有进程) |
四、辅助命令(进程查询)
1. ps aux(查看所有进程详细信息)
-
选项解析 :
a:显示所有用户的进程;u:以用户为中心(显示用户名、CPU/内存占用率);x:显示无控制终端的进程(后台进程);
-
过滤用法 :
ps aux | grep 关键词(筛选含指定关键词的进程),示例:bashps aux | grep job # 查找所有含"job"的进程(命令/参数中包含)
2. 管道符(|)
- 作用:将前一个命令的输出作为后一个命令的输入,实现"查询+筛选"联动。
五、核心运维原则
- 终止进程优先用15号TERM:允许进程清理资源(如保存数据),仅当进程无响应时用9号KILL;
- 重启配置优先用1号HUP:无需终止进程,直接重读配置(如Nginx/Httpd);
- 暂停进程区分19/20:19号STOP强制暂停(不可拦截),20号TSTP键盘暂停(可恢复);
- 批量操作优先killall/pkill:无需逐个查PID,按名称/用户批量处理,效率更高;
- 查询进程优先pgrep :精准筛选用户/终端/名称,避免grep过滤自身进程(可加
grep -v grep排除)。
六、高频实操场景
- 重启Nginx配置:
kill -1 $(pgrep nginx)(无需停止服务); - 强制杀死无响应的Java进程:
pkill -9 -f java(-f匹配命令行完整内容); - 终止指定用户的所有进程:
pkill -U test; - 恢复Ctrl+Z暂停的进程:
jobs(查看暂停进程)→fg %1(前台恢复)/kill -18 进程PID; - 排查进程:
pgrep -l -u root(列出root用户的所有进程名+PID)。