ps
(process status)是 Linux 和类 Unix 系统中用于显示系统中运行进程信息的命令。它可以查看当前用户的进程、所有用户的进程、特定进程,以及进程的状态、CPU/内存使用情况等。ps
是排查系统问题和管理进程的重要工具。
基本语法
常用选项
ps
的选项分为 UNIX 风格、BSD 风格 和 GNU 风格,可以混合使用。
选项 |
描述 |
-A 或 -e |
显示系统中所有的进程。 |
-a |
显示终端上所有用户的进程(不包括会话领导进程)。 |
-u [用户] |
显示指定用户的进程信息。 |
-x |
显示没有控制终端的进程(后台进程)。 |
-f |
显示完整格式的进程信息(包含父进程、启动时间等)。 |
-o [字段名] |
自定义显示的列(指定输出字段)。 |
-p [PID] |
显示指定 PID 的进程信息。 |
-T |
显示与当前终端相关的所有进程。 |
–forest |
以树状结构显示进程的父子关系。 |
aux |
BSD 风格组合:显示所有用户的所有进程,并附带详细信息(常用)。 |
-C [进程名] |
显示指定名称的进程(如 -C nginx )。 |
输出字段说明
默认情况下,ps
输出以下字段(可以通过 -f
或 -o
扩展显示更多字段):
字段 |
描述 |
PID |
进程 ID。 |
TTY |
进程所属的终端(如果进程没有终端,则显示 ? )。 |
TIME |
进程消耗的总 CPU 时间(格式:分钟:秒)。 |
CMD |
启动进程的命令名称或路径。 |
USER |
启动进程的用户。 |
%CPU |
进程占用的 CPU 使用率。 |
%MEM |
进程占用的内存使用率。 |
PPID |
父进程 ID。 |
STAT |
进程状态(如 R、S、T 等,详见下文)。 |
START |
进程启动时间。 |
进程状态(STAT 字段)
ps
输出的 STAT 列表示进程的状态,常见的状态含义如下:
状态 |
描述 |
R |
运行(Running):进程正在运行或在运行队列中等待。 |
S |
休眠(Sleeping):进程处于休眠状态,等待某个事件完成。 |
D |
不可中断休眠(Uninterruptible Sleep):通常是 I/O 进程,不能被信号唤醒。 |
T |
停止(Stopped):进程被停止或暂停。 |
Z |
僵尸(Zombie):进程已终止,但其父进程尚未回收。 |
常用命令和示例
查看当前终端的进程
- 默认显示当前终端(TTY)中运行的进程。
- 输出示例:
1 2 3
| PID TTY TIME CMD 1234 pts/0 00:00:00 bash 5678 pts/0 00:00:01 ps
|
查看系统中所有进程
或:
显示详细进程信息
-f
显示进程的完整格式,包括父进程 ID(PPID)和进程启动时间(START)。
显示所有用户的所有进程
- 这是一个常见的组合,显示所有用户的所有进程,并附带详细信息。
- 输出示例:
1 2 3
| USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 16900 1344 ? Ss Dec08 0:01 /sbin/init user 1234 0.2 1.0 12345 5678 pts/0 R+ 12:34 0:00 python3 script.py
|
查看特定用户的进程
示例:查看 root
用户的进程
按进程名称过滤
- 显示指定名称的进程(注意:只匹配完全相同的名称)。
示例:查看 nginx
进程
查看指定 PID 的进程
示例:查看 PID 为 1234
的进程
显示进程树
或:
- 以树状结构显示进程的父子关系,方便分析进程之间的依赖。
自定义显示字段
1
| ps -eo pid,user,%cpu,%mem,cmd
|
- 使用
-o
选项自定义显示的列。
- 示例:显示 PID、用户、CPU 使用率、内存使用率和命令:
1 2 3
| PID USER %CPU %MEM CMD 1234 root 0.2 1.0 python3 script.py 5678 user 0.1 0.5 /usr/bin/bash
|
结合管道过滤进程
ps
的输出可以通过管道过滤以获取目标进程。
示例:通过 grep
查找某个进程
显示与当前终端相关的进程
显示所有线程
常见用法总结
用法 |
命令示例 |
查看当前终端进程 |
ps |
查看系统中所有进程 |
ps -e 或 ps -A |
显示所有用户的所有进程 |
ps aux |
查看特定用户的进程 |
ps -u username |
查看特定进程的详细信息 |
ps -p PID |
查看特定名称的进程 |
ps -C process_name |
显示进程树 |
ps --forest |
查看线程信息 |
ps -eLf |
自定义显示字段 |
ps -eo pid,user,%cpu,%mem,cmd |
注意事项
-
实时监控进程:
ps
显示的是执行命令时的快照,并不会实时刷新。要实时监控进程,可以使用 top
或 htop
。
-
权限问题:
- 普通用户默认只能查看自己启动的进程。如果需要查看所有用户的进程,可以使用
sudo
提升权限:
-
僵尸进程:
- 如果看到
STAT
列中有 Z
(僵尸进程),说明进程已终止,但其父进程未回收资源。需要检查父进程是否正常运行。
总结
ps
是一个强大的进程管理工具,适合查看当前系统的进程快照。
- 它可以通过选项和过滤灵活显示进程信息,比如按用户、进程名称、PID 等筛选。
- 熟练掌握
ps
,可以帮助快速定位系统性能问题、调试进程运行状态、排查僵尸进程等问题。