ps命令

ps 命令 #

ps命令(process status)用于显示当前运行的进程的快照。它提供了系统中正在运行的进程的详细信息,包括进程 ID、CPU 使用率、内存使用情况等。

语法 #

ps [选项]

常用选项 #

ps命令有三种不同风格的选项:

  1. UNIX 风格(前缀为-
  2. BSD 风格(无前缀)
  3. GNU 风格(前缀为--

常用 UNIX 风格选项 #

选项 描述
-e 显示所有进程
-f 完整格式列表
-l 长格式
-u 用户名 显示指定用户的进程

常用 BSD 风格选项 #

选项 描述
a 显示所有带终端的进程
u 显示用户为导向的格式
x 显示没有控制终端的进程

常用 GNU 风格选项 #

选项 描述
--sort=规则 按指定规则排序
--forest 显示进程树

常见用法 #

1. 显示当前用户的进程 #

ps

输出示例:

  PID TTY          TIME CMD
 1234 pts/0    00:00:01 bash
 5678 pts/0    00:00:00 ps

2. 显示所有进程(BSD 风格) #

ps aux

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168940  9032 ?        Ss   Jul18   0:02 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Jul18   0:00 [kthreadd]
user      1234  0.0  0.2 115432 10292 pts/0    Ss   10:30   0:01 -bash
user      5678  0.0  0.1 155300  7084 pts/0    R+   10:35   0:00 ps aux

3. 显示所有进程(UNIX 风格) #

ps -ef

输出示例:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jul18 ?        00:00:02 /sbin/init
root         2     0  0 Jul18 ?        00:00:00 [kthreadd]
user      1234  1233  0 10:30 pts/0    00:00:01 -bash
user      5678  1234  0 10:35 pts/0    00:00:00 ps -ef

4. 显示进程树 #

ps -ejH

ps axjf

5. 显示特定用户的进程 #

ps -u username

6. 按 CPU 使用率排序 #

ps aux --sort=-%cpu

7. 按内存使用率排序 #

ps aux --sort=-%mem

8. 显示特定进程及其子进程 #

ps -ef --forest | grep processname

9. 显示进程的安全信息 #

ps -eo pid,user,group,args

10. 自定义输出格式 #

ps -eo pid,user,%cpu,%mem,cmd

输出列解释 #

BSD 风格(aux)输出列 #

  • USER:进程所有者
  • PID:进程 ID
  • %CPU:CPU 使用率
  • %MEM:内存使用率
  • VSZ:虚拟内存大小(KB)
  • RSS:常驻内存大小(KB)
  • TTY:控制终端
  • STAT:进程状态代码
  • START:进程启动时间
  • TIME:累计 CPU 时间
  • COMMAND:命令及其参数

UNIX 风格(-ef)输出列 #

  • UID:用户 ID
  • PID:进程 ID
  • PPID:父进程 ID
  • C:CPU 使用率
  • STIME:进程启动时间
  • TTY:控制终端
  • TIME:累计 CPU 时间
  • CMD:命令及其参数

进程状态代码 #

代码 描述
R 运行中或可运行(在运行队列中)
S 可中断的睡眠(等待事件完成)
D 不可中断的睡眠(通常是 IO)
T 已停止(被作业控制信号或因被追踪而停止)
Z 僵尸进程(已终止但父进程尚未调用 wait)
< 高优先级
N 低优先级
+ 前台进程组中的进程

提示 #

  • 组合使用psgrep可以快速找到特定进程:ps aux | grep processname
  • 使用ps -ef --forest可以清晰地查看进程的父子关系
  • 使用watch -n 1 'ps aux --sort=-%cpu | head -10'可以每秒更新一次显示 CPU 使用率最高的 10 个进程
  • 对于实时监控,考虑使用tophtop命令
  • ps命令只显示进程的快照,不会自动更新
  • 使用ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head -10可以自定义输出格式并只显示 CPU 使用率最高的 10 个进程