小小白祈祷中...

ps(process status)是 Linux 和类 Unix 系统中用于显示系统中运行进程信息的命令。它可以查看当前用户的进程、所有用户的进程、特定进程,以及进程的状态、CPU/内存使用情况等。ps 是排查系统问题和管理进程的重要工具。


基本语法

1
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):进程已终止,但其父进程尚未回收。

常用命令和示例

查看当前终端的进程

1
ps
  • 默认显示当前终端(TTY)中运行的进程。
  • 输出示例:
    1
    2
    3
     PID TTY          TIME CMD
    1234 pts/0 00:00:00 bash
    5678 pts/0 00:00:01 ps

查看系统中所有进程

1
ps -e

或:

1
ps -A
  • 显示系统中所有运行的进程。

显示详细进程信息

1
ps -f
  • -f 显示进程的完整格式,包括父进程 ID(PPID)和进程启动时间(START)。

显示所有用户的所有进程

1
ps aux
  • 这是一个常见的组合,显示所有用户的所有进程,并附带详细信息。
  • 输出示例:
    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

查看特定用户的进程

1
ps -u username
  • 仅显示指定用户的进程。

示例:查看 root 用户的进程

1
ps -u root

按进程名称过滤

1
ps -C process_name
  • 显示指定名称的进程(注意:只匹配完全相同的名称)。

示例:查看 nginx 进程

1
ps -C nginx

查看指定 PID 的进程

1
ps -p PID
  • 显示特定 PID 的进程信息。

示例:查看 PID 为 1234 的进程

1
ps -p 1234

显示进程树

1
ps -ejH

或:

1
ps --forest
  • 以树状结构显示进程的父子关系,方便分析进程之间的依赖。

自定义显示字段

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 查找某个进程

1
ps aux | grep nginx

显示与当前终端相关的进程

1
ps -T
  • 显示当前终端上的所有进程(包括子进程)。

显示所有线程

1
ps -eLf
  • -L:显示线程信息。

常见用法总结

用法 命令示例
查看当前终端进程 ps
查看系统中所有进程 ps -eps -A
显示所有用户的所有进程 ps aux
查看特定用户的进程 ps -u username
查看特定进程的详细信息 ps -p PID
查看特定名称的进程 ps -C process_name
显示进程树 ps --forest
查看线程信息 ps -eLf
自定义显示字段 ps -eo pid,user,%cpu,%mem,cmd

注意事项

  1. 实时监控进程

    • ps 显示的是执行命令时的快照,并不会实时刷新。要实时监控进程,可以使用 tophtop
  2. 权限问题

    • 普通用户默认只能查看自己启动的进程。如果需要查看所有用户的进程,可以使用 sudo 提升权限:
      1
      sudo ps aux
  3. 僵尸进程

    • 如果看到 STAT 列中有 Z(僵尸进程),说明进程已终止,但其父进程未回收资源。需要检查父进程是否正常运行。

总结

  • ps 是一个强大的进程管理工具,适合查看当前系统的进程快照。
  • 它可以通过选项和过滤灵活显示进程信息,比如按用户、进程名称、PID 等筛选。
  • 熟练掌握 ps,可以帮助快速定位系统性能问题、调试进程运行状态、排查僵尸进程等问题。