Linux命令-skill(发送信号给进程)
skill 用于向匹配条件的进程发送指定信号,功能类似于 pkill,但语法不同。该命令已过时,现代系统应使用 pkill 或 kill 替代。
🔰简介
skill 属于 procps 软件包(旧版),可以按用户、终端、命令名、PID 等条件筛选进程并发送信号。在新版 procps-ng 中,skill 已被 pkill 完全取代。
| 特性 | 说明 |
|---|---|
| 所属软件包 | procps(旧版)/ procps-ng |
| 状态 | 已过时,推荐使用 pkill |
| 现代替代 | pkill、kill、killall |
| 功能等价 | pkill -信号 表达式 |
⚠️ skill 是过时命令,新脚本和日常操作中请使用 pkill 替代。本文档用于理解遗留脚本中的 skill 调用。
📖语法
bash
skill [信号] [选项] 表达式
skill -l # 列出可用信号
⚙️选项
| 选项 | 说明 |
|---|---|
-u 用户 |
匹配指定用户的进程 |
-t 终端 |
匹配指定终端上的进程 |
-p PID |
匹配指定 PID |
-c 命令 |
匹配指定命令名的进程 |
-n |
仅匹配最新的进程 |
-f |
匹配完整命令行(而非仅命令名) |
-v |
详细输出,显示发送信号的进程 |
信号
| 信号 | 编号 | 说明 |
|---|---|---|
-STOP |
19 | 暂停进程(SIGSTOP) |
-CONT |
18 | 继续已暂停的进程(SIGCONT) |
-KILL |
9 | 强制终止进程(SIGKILL,不可捕获) |
-TERM |
15 | 请求终止进程(SIGTERM,默认信号) |
-HUP |
1 | 挂起信号(常用于重载配置) |
-INT |
2 | 中断信号(同 Ctrl+C) |
-USR1 |
10 | 用户自定义信号 1 |
-USR2 |
12 | 用户自定义信号 2 |
💡示例
示例 1:暂停和继续进程
bash
# 查看当前运行的进程
ps aux | grep firefox
# 输出示例:
user 12345 5.2 3.1 /usr/lib/firefox/firefox
user 12346 0.0 0.1 /usr/lib/firefox/firefox -contentproc
# 暂停 firefox 的所有进程
skill -STOP -c firefox
# 输出示例:
firefox (12345): stopped
firefox (12346): stopped
# 验证进程状态(显示 T = Stopped)
ps aux | grep firefox
# 输出示例:
user 12345 5.2 3.1 T /usr/lib/firefox/firefox
user 12346 0.0 0.1 T /usr/lib/firefox/firefox -contentproc
# 继续已暂停的进程
skill -CONT -c firefox
# 输出示例:
firefox (12345): continued
firefox (12346): continued
示例 2:按用户操作进程
bash
# 暂停用户 alice 的所有进程
skill -STOP -u alice
# 输出示例:
bash (23456): stopped
vim (23457): stopped
python (23458): stopped
node (23460): stopped
# 查看用户 alice 的进程状态
ps -u alice -o pid,stat,cmd
# 输出示例:
PID STAT CMD
23456 T bash
23457 T vim
23458 T python
23460 T node
# 继续用户 alice 的所有进程
skill -CONT -u alice
# 输出示例:
bash (23456): continued
vim (23457): continued
python (23458): continued
node (23460): continued
# 强制终止用户 alice 的所有进程(慎用!)
skill -KILL -u alice
# 输出示例:
bash (23456): killed
vim (23457): killed
python (23458): killed
node (23460): killed
⚠️
skill -KILL -u 用户会终止该用户的所有进程,包括 shell 会话,等同于将该用户踢下线。仅限紧急情况使用。
示例 3:按命令名终止进程
bash
# 温和终止(SIGTERM,默认信号)
skill -c nginx
# 输出示例:
nginx (30100): terminated
nginx (30101): terminated
nginx (30102): terminated
# 强制终止(SIGKILL,不可捕获)
skill -KILL -c nginx
# 输出示例:
nginx (30100): killed
nginx (30101): killed
nginx (30102): killed
# 按终端终止进程
skill -t pts/2
# 输出示例:
bash (24500): terminated
vim (24501): terminated
示例 4:skill 与 pkill 对比
skill 已过时,pkill 是现代替代。以下是两者的语法对比:
bash
# === 暂停用户的所有进程 ===
# skill 方式(已过时)
skill -STOP -u alice
# pkill 方式(推荐)
pkill -STOP -u alice
# 输出对比:
# skill: alice (23456): stopped
# pkill: (无输出,除非加 -e 选项)
# pkill -e -STOP -u alice: bash[23456] stopped
# === 按命令名终止 ===
# skill 方式
skill -c firefox
# pkill 方式
pkill firefox
# === 按终端终止 ===
# skill 方式
skill -t pts/2
# pkill 方式
pkill -t pts/2
# === 按完整命令行匹配 ===
# skill 方式
skill -f "python app.py"
# pkill 方式
pkill -f "python app.py"
# === 列出信号 ===
# skill 方式
skill -l
# 输出示例:
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
# pkill 方式
pkill -l
# 输出示例:
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
skill vs pkill 完整对比
| 对比项 | skill | pkill |
|---|---|---|
| 状态 | 已过时 | 推荐 |
| 信号语法 | skill -KILL |
pkill -9 或 pkill -KILL |
| 按用户 | -u 用户 |
-u 用户 |
| 按命令 | -c 命令 |
直接写命令名 |
| 按终端 | -t 终端 |
-t 终端 |
| 按PID | -p PID |
-P PPID(按父进程) |
| 完整匹配 | -f |
-f |
| 详细输出 | -v |
-e |
| 反向匹配 | 不支持 | -v |
| 查看PID | 不支持 | pgrep |
| 新系统可用 | 可能已移除 | 始终可用 |
⚠️注意
- skill 是过时命令,新脚本中不要使用,用
pkill替代 - 部分新版 Linux 发行版可能已移除 skill 命令
skill -KILL(SIGKILL)是不可捕获的强制终止,进程无法做清理操作- 优先使用
skill -TERM(或默认)温和终止,让进程有机会清理资源 skill -KILL -u 用户会终止该用户的所有进程,非常危险- 在遗留脚本中看到 skill 时,应替换为对应的 pkill 语法
📝总结
skill 是一个过时的进程信号发送工具,功能已被 pkill 完全取代。核心操作是按条件(用户、命令、终端)向进程发送信号。最常见的用法是 skill -STOP -u 用户(暂停)和 skill -KILL -c 命令(强制终止)。在新系统和脚本中,统一使用 pkill 即可。了解 skill 主要为了读懂遗留脚本。
📚相关命令
pkill--- 按条件发送信号(推荐替代)kill--- 按 PID 发送信号killall--- 按进程名发送信号pgrep--- 按条件查找进程 PIDps--- 查看进程状态signal(7)--- Linux 信号参考手册