skill命令在一些现代Linux发行版中可能不可用或已过时。建议使用pkill或killall命令作为替代。
skill命令用于向进程发送信号。它可以根据进程名、用户名、终端等多种条件匹配进程,并向匹配的进程发送指定的信号。
skill [信号] [选项] 进程标识
skill [信号] [选项] -u 用户名
skill [信号] [选项] -t 终端号
skill [信号] [选项] -p 进程ID
skill [信号] [选项] 进程名
skill是snice命令的符号链接| 信号 | 数值 | 说明 |
|---|---|---|
| SIGHUP | 1 | 挂起,通常用于重新加载配置文件 |
| SIGINT | 2 | 中断(Ctrl+C) |
| SIGQUIT | 3 | 退出(产生core dump) |
| SIGKILL | 9 | 强制终止(无法被捕获或忽略) |
| SIGTERM | 15 | 终止(默认信号) |
| SIGSTOP | 17,19,23 | 暂停进程 |
| SIGCONT | 18,19,25 | 继续执行已暂停的进程 |
| 参数 | 说明 |
|---|---|
信号 |
要发送的信号,可以是信号名(如KILL)或信号数值(如9) |
-u 用户名 |
向指定用户的所有进程发送信号 |
-t 终端号 |
向指定终端的所有进程发送信号 |
-p 进程ID |
向指定的进程ID发送信号 |
-c 进程名 |
向指定名称的进程发送信号(默认选项) |
-v |
详细模式,显示正在执行的操作 |
-n |
模拟运行,不实际发送信号 |
-f |
快速模式,匹配时立即发送信号 |
-w |
等待所有进程终止 |
-V |
显示版本信息 |
-h |
显示帮助信息 |
使用默认的TERM信号终止进程:
# 查看当前运行的firefox进程
$ ps aux | grep firefox
john 1234 0.5 2.1 123456 7890 ? Sl 10:00 0:05 /usr/lib/firefox/firefox
# 终止所有firefox进程
$ skill firefox
# 验证进程是否已终止
$ ps aux | grep firefox
# 无输出,表示进程已终止
使用SIGKILL信号强制终止无响应的进程:
# 强制终止所有chrome进程
$ skill -9 chrome
# 或者使用信号名
$ skill KILL chrome
$ skill SIGKILL chrome
使用-u参数终止特定用户的所有进程:
# 查看testuser用户的进程
$ ps -u testuser
PID TTY TIME CMD
2345 ? 00:00:01 bash
2346 ? 00:00:02 vim
2347 ? 00:00:00 ps
# 终止testuser的所有进程(需要root权限)
$ sudo skill -u testuser
# 验证
$ ps -u testuser
PID TTY TIME CMD
# 无进程显示
使用-t参数针对特定终端:
# 查看pts/1终端的进程
$ ps -t pts/1
PID TTY TIME CMD
3456 pts/1 00:00:00 bash
3457 pts/1 00:00:01 top
# 终止pts/1终端的所有进程
$ skill -t pts/1
# 只发送HUP信号,让进程重新加载配置
$ skill HUP -t pts/1
使用STOP和CONT信号控制进程执行:
# 暂停所有python进程
$ skill STOP python
# 查看进程状态
$ ps aux | grep python
john 4567 0.0 0.5 12345 6789 T 10:05 0:00 python script.py
# 状态T表示进程已停止
# 恢复python进程执行
$ skill CONT python
skill支持通配符匹配进程名:
# 终止所有以"test"开头的进程
$ skill test*
# 终止所有包含"server"的进程
$ skill *server*
# 使用-c参数明确指定进程名
$ skill -c apache2
$ skill -c mysql*
使用-v和-n参数:
# 详细模式,显示匹配的进程
$ skill -v firefox
Sending SIGTERM to process 1234 (firefox)
Sending SIGTERM to process 1235 (firefox)
# 模拟运行,不实际发送信号
$ skill -n -v apache2
Would send SIGTERM to process 2345 (apache2)
Would send SIGTERM to process 2346 (apache2)
使用-w参数等待所有进程终止:
# 发送TERM信号并等待进程终止
$ skill -w -v mysqld
Sending SIGTERM to process 3456 (mysqld)
Waiting for process 3456 to die...
Process 3456 has terminated
由于skill命令已过时,建议使用以下替代命令:
# 终止firefox进程
$ pkill firefox
# 强制终止
$ pkill -9 firefox
# 按用户终止
$ pkill -u testuser
# 按终端终止
$ pkill -t pts/1
# 终止进程
$ killall firefox
# 发送特定信号
$ killall -9 firefox
$ killall -HUP apache2
# 交互式确认
$ killall -i process_name
# 查找并终止进程
$ kill $(pgrep firefox)
# 强制终止
$ kill -9 $(pgrep firefox)
A: skill可能不是默认安装的。可以使用pkill、killall或kill命令作为替代。
A: kill需要进程ID,而skill可以根据进程名、用户名、终端等多种条件匹配进程。
A: 可以结合使用-u和进程名:skill -u username process_name
A: 默认没有确认。使用-v参数可以查看详细操作。
A: 使用kill -l可以列出所有可用信号。
pkill - 根据名称和其他属性查找并发送信号给进程(推荐替代)killall - 按进程名发送信号kill - 向进程发送信号pgrep - 查找进程ps - 显示进程状态snice - 修改进程优先级(与skill相关)