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 信号参考手册
相关推荐
潘正翔1 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
changjiahong1 小时前
lvs总结
服务器·数据库·lvs
Echo flower1 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
骊城英雄1 小时前
彩笔运维勇闯机器学习--逻辑回归
运维·机器学习·逻辑回归
孪生质数-2 小时前
AI 应用实践篇——让大模型真正开始工作
linux·运维·服务器·人工智能·深度学习·语言模型·llama
Splashtop高性能远程控制软件2 小时前
连锁零售多门店远程运维指南:从故障响应到批量运维的四项能力
运维·零售·远程控制·splashtop
2301_777998342 小时前
Linux线程同步与互斥(三):信号量与环形队列实现生产者消费者模型
linux·c语言·c++
瞬间&永恒~2 小时前
【MySQL】 InnoDB 锁等待排查与并发压测实验
运维·数据库·mysql
zcmodeltech2 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件