Linux命令-skill(发送信号给进程)

Linux命令-skill(发送信号给进程)

    • 🔰简介
    • 📖语法
    • ⚙️选项
    • 💡示例
      • [示例 1:暂停和继续进程](#示例 1:暂停和继续进程)
      • [示例 2:按用户操作进程](#示例 2:按用户操作进程)
      • [示例 3:按命令名终止进程](#示例 3:按命令名终止进程)
      • [示例 4:skill 与 pkill 对比](#示例 4:skill 与 pkill 对比)
      • [skill vs pkill 完整对比](#skill vs pkill 完整对比)
    • ⚠️注意
    • 📝总结
    • 📚相关命令

skill 用于向匹配条件的进程发送指定信号,功能类似于 pkill,但语法不同。该命令已过时,现代系统应使用 pkillkill 替代。

🔰简介

skill 属于 procps 软件包(旧版),可以按用户、终端、命令名、PID 等条件筛选进程并发送信号。在新版 procps-ng 中,skill 已被 pkill 完全取代。

特性 说明
所属软件包 procps(旧版)/ procps-ng
状态 已过时,推荐使用 pkill
现代替代 pkillkillkillall
功能等价 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 -9pkill -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 --- 按条件查找进程 PID
  • ps --- 查看进程状态
  • signal(7) --- Linux 信号参考手册
相关推荐
wunaiqiezixin16 小时前
MIT 6.S081 xv6 源码精读(Scheduling):sched、scheduler
linux·unix·os·xv6·mit6.s081
书生执笔画浮沉17 小时前
记录一个由浮点运算引起的崩溃
linux
阿 才17 小时前
Matlab(Simulink)使用详解
运维·网络·matlab
St_rive18 小时前
webUI自动化实现及封装
运维·自动化
xx~t18 小时前
嵌入式——Linux软件编程2
linux·运维·服务器·c语言·学习方法
Shell运维手记18 小时前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash
-今昭-18 小时前
MFS高可用负载均衡
运维·负载均衡
ITyunwei098718 小时前
SSL 证书过期排查实战:openssl + Nginx 4步从发现到续签
运维·网络
郝开18 小时前
Docker Compose 本地环境搭建:kkFileView
运维·docker·容器
QYR_1118 小时前
2032年气相分解设备市场规模达2.25亿美元:VPD向高灵敏度、自动化晶圆污染检测升级
运维·自动化