Linux作为多用户、多任务的操作系统,进程管理是其核心功能之一,准确查看进程信息是系统管理和故障排查的基础,在Linux中,显示进程信息的方式多样,不同命令适用于不同场景,从静态快照到实时动态监控,从简单列表到详细树状结构,本文将详细介绍常用进程查看命令的用法、选项及输出含义,帮助用户全面掌握Linux进程显示方法。

基础进程查看命令:ps
ps(process status)是最基础也是最常用的进程查看命令,用于显示当前进程的静态快照,支持多种格式输出,适合快速查看特定时间点的进程状态。
常用选项与组合
-
ps aux:BSD风格选项,显示所有进程的详细信息,是日常使用最频繁的组合之一。- 输出字段包括:
USER:进程所有者PID:进程ID(唯一标识)%CPU:进程占用CPU百分比%MEM:进程占用内存百分比VSZ:虚拟内存大小(KB)RSS:常驻内存集大小(KB)TTY:终端类型,表示无终端(如后台服务)STAT:进程状态(如S休眠、R运行、Z僵尸、D不可中断休眠)START:进程启动时间TIME:累计CPU时间COMMAND:启动命令及参数
示例输出:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 12812 9880 ? Ss 05:00 0:01 /sbin/init splash admin 1234 2.1 5.3 123456 56789 ? Sl 05:30 0:45 /usr/bin/firefox - 输出字段包括:
-
ps -ef:System V风格选项,以完整格式显示所有进程,包含PPID(父进程ID),便于分析进程父子关系。
输出字段与aux类似,增加PPID列,UID PID PPID C STIME TTY TIME CMD root 1 0 0 05:00 ? 00:00:01 /sbin/init splash admin 1234 1233 0 05:30 ? 00:00:45 /usr/bin/firefox -
ps -u username:显示指定用户的进程,如ps -u admin仅显示admin用户的进程。 -
ps -p PID1,PID2:显示指定PID的进程,多个PID用逗号分隔,如ps -p 1,1234。 -
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu:自定义输出列并按CPU占用率降序排序,表示降序,表示升序。
实时动态监控:top与htop
ps仅提供静态快照,若需实时监控进程资源占用情况,需使用动态命令。
top:经典实时进程监控
top默认每3秒刷新一次,按CPU使用率降序排列进程,支持交互操作。
-
交互操作:

P:按CPU使用率排序(默认)M:按内存使用率排序k:杀死指定进程(需输入PID)c:切换命令行显示/隐藏完整路径1:切换CPU总览/各CPU核心分别显示q:退出top
-
输出顶部信息:
- 第一行:系统时间、运行时长、登录用户数、负载平均值(1/5/15分钟)
- 第二行:进程总数(
Tasks)、运行中(running)、休眠(sleeping)、僵尸(zombie)进程数 - 第三行及以下:CPU和内存使用率(
us用户空间、sy系统空间、id空闲、waI/O等待),以及各进程详细信息
htop:增强版实时监控(需安装)
htop是top的替代品,界面更友好,支持鼠标操作、进程树显示、颜色区分,功能更强大。
-
核心优势:
- 树状进程视图(
F5或t键),直观展示父子进程关系 - 快速过滤进程(键搜索,
F3继续查找) - 实时绘制进程资源使用图表
- 支持鼠标点击排序、终止进程
- 默认显示线程数、已打开文件数等更多字段
- 树状进程视图(
-
安装与启动:
sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL htop # 直接启动
进程查找与过滤:pgrep与pidof
当需要根据特定条件(如进程名、用户)查找进程ID时,pgrep和pidof更为高效。
pgrep:按条件匹配进程
pgrep可根据进程名、用户、终端等条件查找进程PID,支持正则表达式,适合脚本调用。
-
常用选项:
-l:显示进程名而不仅是PID-u username:查找指定用户的进程-f:匹配完整命令行(而非仅进程名)-x:精确匹配(完整进程名)
示例:
pgrep -l nginx # 查找nginx进程名及PID pgrep -u admin -f ssh # 查找admin用户运行的ssh相关进程
pidof:通过进程名查找PID
pidof是简化版进程查找工具,仅通过进程名返回PID,不支持复杂条件,适合快速获取单个进程的PID。
示例:

pidof systemd # 查找systemd进程的PID pidof -s nginx # 仅返回第一个匹配的PID(-s=single)
进程树查看:pstree
pstree以树状结构显示进程间的父子关系,便于理解系统进程架构。
-
常用选项:
-p:显示进程PID-u:显示进程所有者-a:显示完整命令行参数
示例输出:
systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager───2*[{NetworkManager}] ├─sshd───sshd───bash───pstree -p └─systemd─┬─(sd-pam) └──2*[systemd+]
/proc文件系统:直接读取进程信息
Linux内核通过/proc虚拟文件系统暴露进程详细信息,每个进程对应/proc/[PID]/目录,可直接查看进程状态、内存、文件描述符等。
-
常用文件:
/proc/[PID]/status:进程状态(内存、PID、父PID、状态等)/proc/[PID]/cmdline:启动命令及参数/proc/[PID]/environ:进程环境变量/proc/[PID]/fd/:进程打开的文件描述符(软链接)/proc/[PID]/maps:进程内存映射
示例:查看PID为1的进程状态
cat /proc/1/status
进程查看命令对比
为方便选择,以下表格总结常用命令的特点及适用场景:
| 命令 | 功能特点 | 常用选项 | 适用场景 |
|---|---|---|---|
| ps | 静态快照,格式灵活 | aux, -ef, -u, -p, -eo | 快速查看特定时间点进程状态 |
| top | 实时动态监控,交互操作 | P, M, k, c, 1 | 实时监控资源占用,终止进程 |
| htop | 增强版top,界面友好 | F5(树状), /(搜索), 鼠标操作 | 需直观查看进程树和资源趋势 |
| pgrep | 按条件匹配PID | -l, -u, -f, -x | 脚本中根据条件查找进程 |
| pidof | 通过进程名查PID | -s(单PID) | 快速获取单个进程PID |
| pstree | 树状显示进程关系 | -p, -u, -a | 分析进程架构和父子依赖 |
| /proc | 直接读取内核进程数据 | 无(直接访问文件) | 获取进程底层详细信息 |
相关问答FAQs
Q1:ps aux和ps -ef的输出有什么区别?如何选择?
A:ps aux采用BSD风格,默认按启动时间倒序排列,包含%CPU、%MEM等资源占用率,适合查看资源消耗;ps -ef采用System V风格,包含PPID(父进程ID),适合分析进程父子关系,若需关注资源使用,选ps aux;若需追溯进程来源,选ps -ef,两者可通过--sort选项自定义排序,如ps aux --sort=-%cpu按CPU降序排列。
Q2:如何查找并杀死僵尸进程?
A:僵尸进程(STAT为Z)已结束运行但父进程未回收其PID,需通过父进程终止,步骤如下:
- 用
ps aux | grep Z查找僵尸进程,记录其PID(如Z 1234)和父进程PID(PPID,可通过ps -ef | grep 1234获取,假设父进程PID为5678); - 检查父进程是否为关键系统进程(如
init),若非关键,杀死父进程:kill -9 5678,父进程终止后,僵尸进程会被init进程回收; - 若父进程为关键进程(如
nginx),需重启该服务或检查代码逻辑(避免子进程异常退出)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23916.html