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,可以帮助快速定位系统性能问题、调试进程运行状态、排查僵尸进程等问题。