第42集:进程查看命令
章节标题
进程查看命令
核心知识点讲解
ps 命令
ps(Process Status)命令是最基本的进程查看命令,用于显示当前系统中的进程信息。
基本用法
# 显示当前终端相关的进程
ps
# 显示所有进程
ps aux
# 以BSD风格显示所有进程
ps axjf常用选项
| 选项 | 描述 |
|---|---|
| a | 显示所有终端的进程 |
| u | 以用户为中心的格式显示 |
| x | 显示无终端的进程 |
| e | 显示所有进程,包括无终端的 |
| f | 显示进程树结构 |
| j | 以作业控制格式显示 |
| l | 以长格式显示 |
| o | 自定义输出格式 |
| p | 显示指定PID的进程 |
| t | 显示指定终端的进程 |
| --sort | 按指定字段排序 |
输出字段解释
| 字段 | 描述 |
|---|---|
| PID | 进程ID |
| PPID | 父进程ID |
| USER | 进程所有者 |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小 |
| RSS | 物理内存大小 |
| TTY | 终端类型 |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | 占用CPU时间 |
| COMMAND | 命令名称 |
自定义输出格式
# 自定义输出格式,显示PID、PPID、USER、COMMAND
ps -eo pid,ppid,user,command
# 显示进程ID、父进程ID、CPU使用率、内存使用率、命令
ps aux --sort=-%cpu | head -10
# 显示进程树
ps axjftop 命令
top 命令是一个交互式的进程监控工具,用于实时显示系统中进程的资源使用情况。
基本用法
# 启动top命令
top
# 以批处理模式运行,显示指定次数后退出
top -b -n 1
# 只显示指定PID的进程
top -p PID1,PID2交互式命令
在top运行时,可以使用以下快捷键:
| 快捷键 | 功能 |
|---|---|
| q | 退出top |
| k | 终止指定进程 |
| r | 调整进程优先级 |
| f | 自定义显示字段 |
| M | 按内存使用率排序 |
| P | 按CPU使用率排序 |
| T | 按CPU时间排序 |
| 1 | 显示所有CPU核心的使用率 |
| z | 启用彩色显示 |
| h | 显示帮助信息 |
输出解释
top命令的输出分为两部分:
- 顶部系统摘要信息:包括系统时间、运行时间、用户数、负载平均值、CPU使用率、内存使用率等
- 进程列表:按默认或用户指定的排序方式显示进程信息
pgrep 命令
pgrep 命令用于根据进程名称或其他属性查找进程的PID。
基本用法
# 根据进程名称查找PID
pgrep 进程名
# 查找包含指定字符串的进程
pgrep -f 字符串
# 显示进程名称和PID
pgrep -l 进程名
# 显示完整命令行
pgrep -a 进程名
# 查找属于指定用户的进程
pgrep -u 用户名 进程名pstree 命令
pstree 命令以树状结构显示进程之间的关系。
基本用法
# 显示进程树
pstree
# 显示PID
pstree -p
# 显示用户名
pstree -u
# 显示进程树,包含PID和用户名
pstree -pu
# 以指定进程为根显示进程树
pstree -p PID其他进程查看命令
pidof 命令
用于查找指定进程名称的PID。
# 查找指定进程名称的PID
pidof 进程名
# 示例:查找sshd进程的PID
pidof sshdprtstat 命令
用于显示进程的状态信息。
# 显示指定PID的进程状态
prtstat PIDpsmisc 工具集
包含多个进程管理工具:
pstree:显示进程树killall:根据进程名称终止进程fuser:显示使用指定文件或端口的进程
实用案例分析
案例1:查找占用资源最多的进程
# 查找CPU使用率最高的10个进程
ps aux --sort=-%cpu | head -10
# 查找内存使用率最高的10个进程
ps aux --sort=-%mem | head -10
# 使用top命令实时查看
top案例2:查找特定进程
# 使用pgrep查找进程
pgrep nginx
# 显示进程名称和PID
pgrep -l nginx
# 显示完整命令行
pgrep -a nginx
# 使用ps查找进程
ps aux | grep nginx
# 使用pidof查找进程
pidof nginx案例3:查看进程树
# 显示完整的进程树
pstree
# 显示进程树,包含PID
pstree -p
# 以指定进程为根显示进程树
pstree -p $(pgrep nginx | head -1)
# 使用ps命令显示进程树
ps axjf案例4:监控系统状态
# 实时监控系统状态
top
# 以批处理模式运行,适合脚本使用
top -b -n 1 | head -20
# 查看系统负载
uptime
# 查看内存使用情况
free -h
# 查看CPU使用情况
mpstat案例5:进程筛选和排序
# 按CPU使用率排序
ps aux --sort=-%cpu
# 按内存使用率排序
ps aux --sort=-%mem
# 按启动时间排序
ps aux --sort=start_time
# 筛选指定用户的进程
ps -u username
# 筛选指定终端的进程
ps -t pts/0
# 自定义输出格式
ps -eo pid,ppid,user,%cpu,%mem,command --sort=-%cpu | head -10代码示例
示例1:进程监控脚本
#!/bin/bash
# 进程监控脚本
# 显示帮助信息
show_help() {
echo "进程监控脚本"
echo "用法: $0 [选项]"
echo "选项:"
echo " -c, --cpu <number> 显示CPU使用率最高的N个进程"
echo " -m, --mem <number> 显示内存使用率最高的N个进程"
echo " -p, --process <name> 查找指定名称的进程"
echo " -t, --tree 显示进程树"
echo " -s, --status <pid> 显示指定PID的进程状态"
echo " -h, --help 显示帮助信息"
}
# 解析命令行参数
CPU_TOP=0
MEM_TOP=0
PROCESS_NAME=""
SHOW_TREE=false
PROCESS_STATUS=0
while [[ $# -gt 0 ]]; do
case $1 in
-c|--cpu)
CPU_TOP="$2"
shift 2
;;
-m|--mem)
MEM_TOP="$2"
shift 2
;;
-p|--process)
PROCESS_NAME="$2"
shift 2
;;
-t|--tree)
SHOW_TREE=true
shift
;;
-s|--status)
PROCESS_STATUS="$2"
shift 2
;;
-h|--help)
show_help
exit 0
;;
*)
echo "未知选项: $1"
show_help
exit 1
;;
esac
done
# 显示CPU使用率最高的进程
if [[ $CPU_TOP -gt 0 ]]; then
echo "=== CPU使用率最高的 $CPU_TOP 个进程 ==="
ps aux --sort=-%cpu | head -$((CPU_TOP + 1))
echo ""
fi
# 显示内存使用率最高的进程
if [[ $MEM_TOP -gt 0 ]]; then
echo "=== 内存使用率最高的 $MEM_TOP 个进程 ==="
ps aux --sort=-%mem | head -$((MEM_TOP + 1))
echo ""
fi
# 查找指定名称的进程
if [[ -n "$PROCESS_NAME" ]]; then
echo "=== 名称包含 '$PROCESS_NAME' 的进程 ==="
ps aux | grep "$PROCESS_NAME" | grep -v grep
echo ""
echo "=== 使用pgrep查找 '$PROCESS_NAME' ==="
pgrep -a "$PROCESS_NAME"
echo ""
fi
# 显示进程树
if $SHOW_TREE; then
echo "=== 进程树 ==="
pstree -pu
echo ""
fi
# 显示指定PID的进程状态
if [[ $PROCESS_STATUS -gt 0 ]]; then
echo "=== 进程 $PROCESS_STATUS 的状态 ==="
ps -p $PROCESS_STATUS -o pid,ppid,user,%cpu,%mem,state,command
echo ""
echo "=== 进程 $PROCESS_STATUS 的树状结构 ==="
pstree -p $PROCESS_STATUS
echo ""
fi
# 如果没有指定选项,显示系统概览
if [[ $CPU_TOP -eq 0 && $MEM_TOP -eq 0 && -z "$PROCESS_NAME" && ! $SHOW_TREE && $PROCESS_STATUS -eq 0 ]]; then
echo "=== 系统概览 ==="
uptime
echo ""
echo "=== 内存使用情况 ==="
free -h
echo ""
echo "=== CPU使用情况 ==="
mpstat
echo ""
echo "=== 活跃进程数 ==="
ps aux | wc -l
echo ""
echo "=== CPU使用率最高的5个进程 ==="
ps aux --sort=-%cpu | head -6
echo ""
echo "=== 内存使用率最高的5个进程 ==="
ps aux --sort=-%mem | head -6
echo ""
fi
echo "监控完成"示例2:进程状态检查脚本
#!/bin/bash
# 进程状态检查脚本
# 检查进程是否存在
check_process() {
local process_name="$1"
local pid=$(pgrep -f "$process_name" | head -1)
if [[ -n "$pid" ]]; then
echo "进程 '$process_name' 存在,PID: $pid"
return 0
else
echo "进程 '$process_name' 不存在"
return 1
fi
}
# 检查多个进程
processes=("nginx" "mysql" "ssh" "apache2")
echo "=== 进程状态检查 ==="
echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
for process in "${processes[@]}"; do
check_process "$process"
echo ""
done
# 检查系统负载
echo "=== 系统负载 ==="
uptime
echo ""
# 检查系统资源使用情况
echo "=== 系统资源使用情况 ==="
top -b -n 1 | head -20
echo ""
echo "检查完成"示例3:进程统计脚本
#!/bin/bash
# 进程统计脚本
echo "=== 进程统计报告 ==="
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# 总进程数
total_processes=$(ps aux | wc -l)
echo "总进程数: $((total_processes - 1))" # 减1是因为ps命令本身也会被计数
# 按用户统计进程数
echo ""
echo "=== 按用户统计进程数 ==="
ps aux | awk '{print $1}' | sort | uniq -c | sort -nr
# 按状态统计进程数
echo ""
echo "=== 按状态统计进程数 ==="
ps aux | awk '{print $8}' | sort | uniq -c | sort -nr
# CPU使用率最高的进程
echo ""
echo "=== CPU使用率最高的5个进程 ==="
ps aux --sort=-%cpu | head -6
# 内存使用率最高的进程
echo ""
echo "=== 内存使用率最高的5个进程 ==="
ps aux --sort=-%mem | head -6
# 占用CPU时间最长的进程
echo ""
echo "=== 占用CPU时间最长的5个进程 ==="
ps aux --sort=-time | head -6
# 最年轻的进程
echo ""
echo "=== 最年轻的5个进程 ==="
ps aux --sort=start_time | tail -6
# 最老的进程
echo ""
echo "=== 最老的5个进程 ==="
ps aux --sort=-start_time | head -6
echo ""
echo "统计完成"总结
本集介绍了 Linux 中常用的进程查看命令,包括:
ps命令:最基本的进程查看命令,支持多种显示格式和选项top命令:交互式的进程监控工具,实时显示系统和进程状态pgrep命令:根据进程名称或其他属性查找进程的PIDpstree命令:以树状结构显示进程之间的关系- 其他进程查看命令:如
pidof、prtstat等
同时,本集还介绍了这些命令的常用选项、输出字段解释,以及多个实用案例和代码示例,包括:
- 查找占用资源最多的进程
- 查找特定进程
- 查看进程树
- 监控系统状态
- 进程筛选和排序
- 进程监控脚本
- 进程状态检查脚本
- 进程统计脚本
通过掌握这些进程查看命令和技巧,用户可以更好地了解系统的运行状态,监控进程的资源使用情况,及时发现和解决系统问题,从而提高系统的稳定性和性能。