目录
1.概要
2.内容
在 Ubuntu 系统中,除了 ps
命令外,还有许多其他工具可用于查看和管理进程。以下是常用的命令及其使用场景:
1. top
命令
用途:实时动态查看系统进程和资源占用情况(类似 Windows
的任务管理器)。
top
- 常用操作:
- 按
P
:按 CPU 使用率排序。 - 按
M
:按内存使用率排序。 - 按
k
:终止指定 PID 的进程。 - 按
q
:退出。
- 按
2. htop
命令
用途:增强版 top
,支持鼠标操作和更友好的界面。
sudo apt install htop # 如果未安装,先执行安装
htop
- 常用操作:
- 鼠标左键点击表头排序。
- 按
F2
:进入设置,可自定义显示字段。 - 按
F9
:发送信号(如SIGKILL
强制终止)。
3. pgrep
命令
用途:根据进程名直接查找进程 PID。
pgrep nginx # 查找所有名为 "nginx" 的进程 PID
pgrep -u root # 查找 root 用户的所有进程 PID
pgrep -x "python3" # 精确匹配完整命令名
4. pstree
命令
用途:以树状结构显示进程关系。
pstree # 显示所有进程的树状结构
pstree -p # 显示 PID
pstree -u # 显示进程所有者
5. kill
和 killall
命令
用途:终止进程。
kill -9 1234 # 通过 PID 强制终止进程
killall -9 nginx # 通过进程名强制终止所有 "nginx" 进程
- 常用信号:
-9
或-SIGKILL
:强制终止。-15
或-SIGTERM
:默认终止信号(允许进程清理)。
6. systemctl
命令
用途:管理系统服务进程(如 nginx
、mysql
)。
systemctl status nginx # 查看服务状态
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
7. 其他工具
vmstat
:查看系统整体资源使用情况(CPU、内存、I/O 等)。iostat
:监控磁盘 I/O 性能。nmon
:综合性能监控工具(需安装)。
常用组合示例
-
查找并终止进程:
pgrep nginx | xargs kill -9 # 强制终止所有 nginx 进程
-
监控高 CPU 占用进程:
top -b -n 1 | head -n 17 # 静态查看 top 结果 htop --sort-key PERCENT_CPU # 按 CPU 排序
-
分析进程树:
pstree -p | grep -A 3 nginx # 查看 nginx 进程的子进程
根据需求选择合适的工具:ps
适合静态查看,top
/htop
适合动态监控,pgrep
/kill
适合快速操作进程。
3.关联链接
4.关联知识
1.top 命令详解
top
是 Linux 系统中一个强大的实时系统监控工具,用于动态查看系统的进程和资源使用情况(如 CPU、内存、负载等)。以下是其详细解析:
1. 启动方式
- 基本命令:
top
- 常用选项:
top -d 1 # 每1秒刷新一次(默认3秒) top -u username # 显示特定用户的进程 top -p PID # 监控指定PID的进程 top -n 5 # 刷新5次后退出 top -b # 批处理模式(输出到文件或管道)
2. 界面布局
启动后分为上下两部分:
- 上半部分:系统整体状态(每行含义见下文)。
- 下半部分:进程列表(按 CPU 或内存排序)。
3. 系统状态解析(上半部分)
行号 | 字段 | 说明 |
---|---|---|
1 | top - 时间 | 系统运行时间(up 后为启动时间,如 1 day ) |
2 | load average | 系统平均负载(1/5/15分钟的平均进程数,需结合CPU核数判断是否正常) |
3 | Tasks | 总进程数(运行、休眠、停止、僵尸进程数) |
4 | Cpu(s) | CPU使用率(用户空间、系统空间、空闲、等待I/O、硬件中断等) |
5 | Mem | 物理内存总量、已用、空闲、缓存(buff/cache ) |
6 | Swap | 交换分区(虚拟内存)的使用情况 |
4. 进程列表字段(下半部分)
列名 | 说明 |
---|---|
PID | 进程ID |
USER | 进程所有者 |
PR | 优先级(Priority) |
NI | Nice值(优先级调整值,范围-20~19) |
VIRT | 虚拟内存总量(KB) |
RES | 实际使用的物理内存(KB) |
SHR | 共享内存大小(KB) |
S | 进程状态(R =运行, S =睡眠, Z =僵尸, D =不可中断睡眠等) |
%CPU | CPU占用百分比 |
%MEM | 内存占用百分比 |
TIME+ | 进程使用的总CPU时间(格式:分:秒.毫秒) |
COMMAND | 启动进程的命令(可能截断,按 c 可显示完整路径) |
5. 常用快捷键
按键 | 功能 |
---|---|
P | 按 CPU 使用率排序 |
M | 按内存使用率排序 |
T | 按运行时间排序 |
k | 终止指定 PID 的进程(需输入信号,默认15为SIGTERM) |
r | 调整进程优先级(Nice值) |
h | 显示帮助文档 |
q | 退出 top |
1 | 展开多核CPU的详细使用率 |
f | 进入字段管理界面(可自定义显示的列) |
F | 按特定列排序(需配合字段选择) |
z | 切换颜色高亮模式 |
c | 切换命令的完整显示(避免截断) |
6. 高级用法示例
- 保存输出到文件:
top -b -n 1 > system_status.txt
- 监控特定用户进程:
top -u mysql
- 按内存排序并刷新5次:
top -o %MEM -n 5
7. 注意事项
- 负载(Load Average):
- 单核CPU:1.0 表示满负荷。
- 多核CPU:需乘以核数(如4核CPU,4.0为满负荷)。
- 僵尸进程(Z状态):
- 已终止但未释放资源的进程,通常由父进程未正确处理导致。
- 优先级调整:
- 普通用户只能降低优先级(增加Nice值),root可任意调整。
通过 top
,用户可以快速定位资源占用高的进程,分析系统瓶颈,是系统管理和调试的必备工具。
2.htop 命令 详解
htop
是 top
的增强版工具,提供更直观的交互式界面、颜色高亮、鼠标操作支持等功能,适合实时监控 Linux 系统资源。以下是其详解:
1. 安装
- Debian/Ubuntu:
sudo apt install htop
- RHEL/CentOS:
sudo yum install htop
- Fedora:
sudo dnf install htop
2. 启动方式
htop # 直接启动
htop -d 2 # 每2秒刷新一次
htop -u user # 显示特定用户的进程
htop -p PID # 监控指定PID的进程
3. 界面布局
- 上半部分:系统资源概览(CPU、内存、负载等)。
- 下半部分:进程列表(支持垂直/水平滚动)。
- 顶部菜单栏:F1~F10 提供快捷操作。
4. 系统状态解析(上半部分)
- CPU:
- 多核状态以条形图显示,颜色区分使用率(红高绿低)。
- 支持按
1
展开详细单核状态。
- 内存:
- 物理内存和交换分区的使用情况,颜色区分(黄/红表示紧张)。
- 负载:
- 与
top
类似,但颜色高亮(红/黄/绿)。
- 与
5. 进程列表字段
与 top
类似,但支持更多列和颜色:
- PID:进程ID(绿色为运行中)。
- USER:进程所有者。
- PRI/NI:优先级和Nice值。
- VIRT/RES/SHR:虚拟内存、物理内存、共享内存。
- CPU%:CPU占用率(红色高亮高负载)。
- MEM%:内存占用率。
- TIME+:累计CPU时间。
- Command:进程命令(支持鼠标悬停显示完整路径)。
6. 核心功能快捷键
按键 | 功能 |
---|---|
F1 | 查看帮助文档 |
F2 | 进入设置菜单(调整颜色、列、刷新频率等) |
F3 | 搜索进程(支持正则表达式) |
F4 | 按过滤器筛选进程(如仅显示特定用户或命令) |
F5 | 树状视图(显示进程父子关系) |
F6 | 按列排序(默认按CPU%,可切换内存、PID等) |
F7 | 降低进程优先级(Nice值+1) |
F8 | 提高进程优先级(Nice值-1) |
F9 | 终止进程(发送SIGTERM信号,可自定义信号) |
F10 | 退出 htop |
Space | 快速滚动页面 |
鼠标滚轮 | 垂直滚动进程列表 |
Shift+鼠标滚轮 | 水平滚动列 |
7. 高级功能
- 颜色主题:
- 通过
F2
→Colors
自定义颜色方案(如高亮高负载进程)。
- 通过
- 列自定义:
- 通过
F2
→Columns
调整显示的列及其顺序。
- 通过
- 快捷键绑定:
- 通过
F2
→Keys
修改快捷键(如将k
设为终止进程)。
- 通过
- 进程跟踪:
- 右键进程 →
Track this process
持续监控(类似strace
)。
- 右键进程 →
8. 使用场景示例
- 快速定位高负载进程:
- 按
P
(CPU%)或M
(内存%)排序,红色进程需关注。
- 按
- 终止僵尸进程:
- 搜索
Z
状态进程,按F9
发送信号。
- 搜索
- 分析进程树:
- 按
F5
查看父子进程,帮助理解服务依赖。
- 按
- 资源监控脚本:
htop -b -n 1 > system_status.txt # 批处理模式输出到文件
9. 对比 top
的优势
特性 | htop | top |
---|---|---|
界面交互 | 支持鼠标、快捷键、滚动 | 仅键盘操作,无滚动 |
颜色高亮 | 默认启用,可自定义 | 无 |
树状视图 | F5 快速切换 | 需第三方工具(如 pstree ) |
列自定义 | 动态调整列和顺序 | 需启动前配置 |
进程管理 | 一键终止、优先级调整 | 需手动输入命令 |
通过 htop
,用户可以更高效地监控系统资源,快速响应性能问题,是 Linux 系统管理的推荐工具。
3.pgrep 命令详解
pgrep
是 Linux 中用于根据进程名或其他属性快速查找进程 PID(Process ID)的命令,常用于脚本或命令行中动态管理进程。以下是其详解:
1. 基本语法
pgrep [选项] <进程名或模式>
2. 常用选项
选项 | 说明 |
---|---|
-l | 显示进程名和PID(默认仅显示PID) |
-f | 匹配完整的命令行(而不仅是进程名) |
-u <用户> | 仅匹配指定用户的进程 |
-x | 精确匹配进程名(避免部分匹配) |
-n | 选择最新的进程(按启动时间) |
-o | 选择最旧的进程(按启动时间) |
-c | 统计匹配进程的数量(不输出PID) |
-P <PID> | 查找指定父进程的子进程 |
-g <PGRP> | 匹配指定进程组的进程 |
-t <终端> | 匹配指定终端关联的进程 |
3. 使用示例
基础用法
pgrep nginx # 查找所有名为 "nginx" 的进程PID
pgrep -l ssh # 显示进程名和PID(如 "sshd 1234")
pgrep -f "python app.py" # 查找完整命令行包含 "python app.py" 的进程
按用户过滤
pgrep -u root # 查找所有属于 root 用户的进程
pgrep -u alice -f "chrome" # 查找 alice 用户运行的包含 "chrome" 的进程
精确匹配
pgrep -x "nginx" # 仅匹配进程名完全等于 "nginx" 的进程(排除 "nginx-worker" 等)
统计进程数
pgrep -c sshd # 输出 sshd 进程的数量(如 "3")
结合 pkill
使用
pgrep -f "node app.js" | xargs kill # 查找并终止所有运行 "node app.js" 的进程
pkill -9 -f "zombie-process" # 直接强制终止匹配进程(无需先查PID)
4. 与 pidof
的区别
pgrep
:- 支持更多匹配条件(如用户、命令行、进程组等)。
- 默认输出PID,可结合
-l
显示进程名。 - 支持正则表达式匹配(如
pgrep -f "^python"
)。
pidof
:- 仅通过进程名直接匹配,语法更简单。
- 直接返回PID列表(如
pidof sshd
)。
5. 高级场景
查找子进程
pgrep -P 1234 # 查找父进程PID为1234的所有子进程
按进程组过滤
pgrep -g 5678 # 查找属于进程组5678的进程
按终端过滤
pgrep -t pts/0 # 查找关联到终端 pts/0 的进程
6. 典型用途
- 脚本中动态获取PID:
# 重启所有Java服务 pkill -HUP java
- 批量管理进程:
# 终止所有Python脚本 pkill -9 python
- 监控进程状态:
while true; do pgrep -c my_script; sleep 1; done # 每秒检查进程是否存在
7. 注意事项
- 若未找到匹配进程,
pgrep
默认返回空(可通过set -e
在脚本中捕获错误)。 - 使用
-f
时注意引号包裹模式(如pgrep -f "exact command line"
)。 - 部分选项(如
-P
)可能需要较新版本的pgrep
支持。
通过灵活组合选项,pgrep
能高效替代 ps | grep
的传统用法,是系统管理和脚本编写的实用工具。
4.kill命令详解
kill
是 Linux 中用于向进程发送信号的命令,常用于终止或管理进程。以下是其详解:
1. 基本语法
kill [选项] <PID> [信号]
2. 常用信号
信号名 | 信号值 | 说明 |
---|---|---|
SIGTERM | 15 | 终止进程(默认信号,可被捕获或忽略) |
SIGKILL | 9 | 强制终止进程(不可被捕获或忽略) |
SIGHUP | 1 | 挂起进程(常用于重启服务) |
SIGINT | 2 | 中断进程(如 Ctrl+C) |
SIGSTOP | 19 | 暂停进程(不可被捕获或忽略) |
SIGCONT | 18 | 继续执行暂停的进程 |
3. 常用选项
选项 | 说明 |
---|---|
-l | 列出所有支持的信号名称及其值 |
-s <信号> 或 -SIG <信号> | 指定发送的信号(如 -9 或 -SIGKILL ) |
-0 | 检查进程是否存在(不发送信号,返回状态码) |
-n | 仅向进程组中的第一个进程发送信号(需配合 -PID ) |
4. 使用示例
终止进程
kill 1234 # 向 PID 1234 发送 SIGTERM(默认)
kill -9 1234 # 强制终止 PID 1234(SIGKILL)
kill -HUP 5678 # 向 PID 5678 发送 SIGHUP(如重启服务)
批量终止进程
kill 1234 5678 9012 # 同时向多个 PID 发送 SIGTERM
kill -9 $(pgrep nginx) # 强制终止所有名为 "nginx" 的进程
结合 pgrep
使用
pgrep -f "python script.py" | xargs kill # 查找并终止所有匹配的进程
检查进程是否存在
kill -0 1234 && echo "进程存在" || echo "进程不存在"
5. 注意事项
- 信号优先级:
SIGKILL
(9)和SIGSTOP
(19)不可被进程捕获或忽略,直接由内核处理。SIGTERM
(15)是默认的终止信号,允许进程进行清理操作。
- 权限限制:
- 普通用户只能向自己的进程发送信号,需
sudo
才能操作其他用户的进程。
- 普通用户只能向自己的进程发送信号,需
- 进程名匹配:
kill
仅接受 PID,若需通过进程名终止,需结合pgrep
或pkill
。
6. 相关命令
pkill
:直接通过进程名发送信号(如pkill -9 nginx
)。killall
:向所有同名进程发送信号(如killall -HUP sshd
)。top
/htop
:实时监控进程并发送信号(需交互操作)。
7. 典型用途
- 终止无响应进程:
kill -9 $(pgrep frozen_app) # 强制终止无响应的应用
- 服务重启:
kill -HUP $(cat /var/run/nginx.pid) # 平滑重启 Nginx
- 脚本中进程管理:
# 等待进程结束后再继续执行 kill 1234 && wait 1234
8. 信号列表查看
kill -l # 列出所有信号名称(如 "SIGHUP", "SIGINT" 等)
kill -l 9 # 查看信号值 9 对应的名称(SIGKILL)
通过灵活使用信号和选项,kill
是管理系统进程的核心工具之一。
5.killall 命令详解
killall
是 Linux 中用于通过进程名批量发送信号的命令,适合管理多个同名进程。以下是其详解:
1. 命令概述
- 功能:向所有匹配进程名的进程发送指定信号。
- 适用场景:批量终止同名进程(如所有
nginx
实例)、服务重启等。 - 默认信号:
SIGTERM
(15,终止进程,允许清理)。
2. 基本语法
killall [选项] <进程名> [信号]
3. 常用信号
信号名 | 信号值 | 说明 |
---|---|---|
SIGTERM | 15 | 终止进程(默认,可被捕获或忽略) |
SIGKILL | 9 | 强制终止进程(不可被捕获或忽略) |
SIGHUP | 1 | 挂起进程(常用于重启服务) |
SIGINT | 2 | 中断进程(如 Ctrl+C) |
SIGSTOP | 19 | 暂停进程(不可被捕获或忽略) |
SIGCONT | 18 | 继续执行暂停的进程 |
4. 常用选项
选项 | 说明 |
---|---|
-e | 要求进程名完全匹配(避免子字符串误杀) |
-I | 忽略进程名大小写 |
-v | 显示详细信息(如被发送信号的进程) |
-Z <上下文> | 仅杀死拥有特定安全上下文的进程(如 SELinux 策略) |
-r | 使用正则表达式匹配进程名 |
-s <信号> 或 -SIG <信号> | 指定发送的信号(如 -9 或 -SIGKILL ) |
5. 使用示例
终止所有同名进程
killall nginx # 向所有 nginx 进程发送 SIGTERM
killall -9 python # 强制终止所有 Python 进程
killall -HUP sshd # 向所有 sshd 进程发送 SIGHUP(重启服务)
精确匹配进程名
killall -e "nginx: master" # 仅终止进程名完全匹配 "nginx: master" 的进程
结合正则表达式
killall -r "nginx.*worker" # 终止所有进程名匹配 "nginx.*worker" 的进程
查看详细信息
killall -v -HUP httpd # 显示向所有 httpd 进程发送 SIGHUP 的详细信息
按用户过滤
killall -u root sshd # 终止所有属于 root 用户的 sshd 进程(需结合其他工具如 `pgrep`)
6. 注意事项
- 权限限制:
- 普通用户只能终止自己的进程,需
sudo
才能操作其他用户的进程。
- 普通用户只能终止自己的进程,需
- 进程名匹配:
- 默认支持子字符串匹配(如
killall http
可能影响httpd
)。 - 使用
-e
确保完全匹配,避免误杀。
- 默认支持子字符串匹配(如
- 强制终止风险:
SIGKILL
(-9
)会立即终止进程,可能导致未保存的数据丢失。
- 僵尸进程无效:
killall
对僵尸进程(状态为Z
)无效,需终止其父进程。
7. 与 pkill
的区别
命令 | 特点 |
---|---|
killall | 通过进程名直接匹配,支持简单模式 |
pkill | 支持更复杂的匹配(如用户、终端、资源占用) |
8. 典型用途
- 批量管理服务:
killall -HUP nginx # 平滑重启所有 Nginx 进程
- 脚本自动化:
killall -9 "temp_script.sh" # 强制终止所有临时脚本
- 清理后台任务:
killall -INT "data_processor" # 向所有数据处理进程发送 SIGINT(模拟 Ctrl+C)
9. 安全建议
- 先验证进程:
pgrep nginx # 查看匹配的 PID 列表 killall -v nginx # 确认后再执行
- 谨慎使用
-9
:
优先尝试SIGTERM
,无效时再强制终止。
通过灵活使用 killall
,可以高效管理系统中同名的多个进程,提升运维效率。
7.systemctl 命令详解
systemctl
是 Linux 系统中用于管理系统和服务(由 systemd 管理)的核心命令。它支持服务的启动、停止、重启、状态查看、依赖管理、日志追踪等操作。以下是其详解:
1. 基本语法
systemctl [选项] <命令> <服务名>.service
2. 常用命令
命令 | 说明 |
---|---|
start | 启动服务 |
stop | 停止服务 |
restart | 重启服务(先停止后启动) |
reload | 重新加载服务配置(不重启) |
status | 查看服务状态 |
enable | 启用开机自启 |
disable | 禁用开机自启 |
is-enabled | 检查服务是否启用开机自启 |
is-active | 检查服务是否正在运行 |
list-units | 列出所有已加载的服务和单元 |
list-unit-files | 列出所有已安装的服务文件(含状态) |
daemon-reload | 重新加载 systemd 配置文件(修改服务文件后需执行) |
mask | 彻底禁用服务(链接到 /dev/null ) |
unmask | 取消 mask 的禁用状态 |
cat | 查看服务单元文件内容 |
show | 查看服务的详细属性和状态 |
reset-failed | 重置服务的失败状态 |
3. 常用选项
选项 | 说明 |
---|---|
-l 或 --full | 不省略状态信息(如完整输出) |
-a 或 --all | 显示所有服务(包括非活动状态) |
-t <类型> | 按类型过滤(如 service 、socket ) |
--now | 执行命令后立即操作(如 enable --now 启动并启用) |
--force | 强制操作(如覆盖冲突文件) |
-n <行数> | 显示日志行数(结合 status 使用) |
-f | 跟踪日志输出(实时查看) |
4. 使用示例
管理单个服务
sudo systemctl start nginx # 启动 Nginx
sudo systemctl restart mysql # 重启 MySQL
sudo systemctl stop apache2 # 停止 Apache
sudo systemctl reload sshd # 重载 SSH 配置(不中断服务)
查看服务状态
systemctl status docker # 查看 Docker 状态
systemctl is-active nginx # 检查 Nginx 是否运行(返回 "active" 或 "inactive")
systemctl is-enabled firewalld # 检查防火墙是否开机自启
启用/禁用开机自启
sudo systemctl enable docker # 启用 Docker 开机自启
sudo systemctl disable postfix # 禁用 Postfix 开机自启
查看所有服务
systemctl list-units --type=service # 列出所有服务单元
systemctl list-unit-files --state=enabled # 列出已启用的服务
重新加载配置
sudo systemctl daemon-reload # 修改服务文件后需执行
sudo systemctl restart my_service # 重新加载后重启服务
调试服务
journalctl -u nginx -n 50 --no-pager # 查看 Nginx 最近 50 行日志
systemctl show nginx | grep ExecStart # 查看服务的启动命令
5. 高级用法
设置服务依赖
在单元文件(如 my_service.service
)中指定依赖:
[Unit]
Requires=network-online.target # 依赖网络就绪
After=network-online.target # 在网络就绪后启动
修改服务环境变量
在单元文件中添加:
[Service]
Environment="KEY=value"
强制操作
sudo systemctl restart --force nginx # 强制重启(即使进程未响应)
6. 注意事项
- 权限要求:
- 修改系统服务通常需要
sudo
权限。
- 修改系统服务通常需要
- 服务文件位置:
- 用户级服务:
~/.config/systemd/user/
- 系统级服务:
/etc/systemd/system/
或/usr/lib/systemd/system/
- 用户级服务:
- 依赖管理:
- 使用
Requires
和After
确保服务启动顺序。
- 使用
- 日志查看:
- 结合
journalctl
分析服务问题(如journalctl -xe
查看启动错误)。
- 结合
- 兼容性:
systemctl
是 systemd 的工具,不适用于 SysV init 或 Upstart 系统。
7. 相关命令
journalctl
:查看 systemd 日志(如journalctl -u nginx -f
实时跟踪日志)。systemd-analyze
:分析系统启动时间和服务依赖。hostnamectl
:管理主机名和主机信息。timedatectl
:管理时间和时区。
8. 典型场景
- 部署新服务:
sudo cp my_service.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl start my_service sudo systemctl enable my_service
- 排查启动失败:
systemctl status my_service # 查看错误摘要 journalctl -u my_service -b # 查看本次启动的完整日志
- 临时禁用服务:
sudo systemctl stop my_service sudo systemctl mask my_service # 彻底禁用(创建符号链接到 /dev/null)
通过灵活使用 systemctl
,可以高效管理 Linux 系统的服务和资源。