ZhouChuang's Blog ZhouChuang's Blog
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Zhou Chuang

为学日益 为道日损
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Linux 命令

    • 进程管理

      • ps、pstree、pgrep 命令详解
        • ps:查看进程
          • 使用范例
          • 1. ps 命令不接任何参数
          • 2. ps -ef
          • 3. ps aux
          • 4. ps -u root
          • 5. ps -l
          • 6. 显示进程树
          • 7. 输出指定字段
        • pstree:显示进程状态树
          • 常用选项
        • pgrep:查找匹配条件的进程
      • top 命令介绍
    • 磁盘与文件管理

    • 信息显示与文件搜索

  • 日常的总结

  • Prometheus 技术栈

  • 运维
  • Linux 命令
  • 进程管理
ZhouChuang
2025-02-13
目录

ps、pstree、pgrep 命令详解

# ps:查看进程

ps(Process Status)命令用于查看系统当前进程状态。

语法格式:

ps [options]
1

ps 参数的格式具体如下:

  • UNIX 格式:一个 “-” 开头。
  • BSD 格式:没有 “-” 开头。
  • GUN 长格式:两个 “-” 开头。

选项说明:

ps 命令的参数选项及说明:

参数说明 解释说明
-a 显示所有终端下执行的进程
a 显示与终端相关的所有进程,包含每个进程的完整路径
x 显示与终端无关的所有进程
u 显示进程的用户信息
-u 显示指定用户相关的进程信息
-e 显示所有进程
-f 额外显示 UID、PPID、C 与 STIME 栏位
f 显示进程树
-H 显示进程树
-l 以详细的格式来显示进程的状况
-o 自定义输出指定的字段,以逗号分隔
--sort key key 表示为指定字段排序,默认升序,+key 升序,-key 降序

# 使用范例

# 1. ps 命令不接任何参数

[root@localhost ~]# ps
    PID TTY          TIME CMD
 187113 pts/0    00:00:00 bash
 187235 pts/0    00:00:00 ps
1
2
3
4

当 ps 命令不接任何参数时,输出的是使用者当前所在终端(窗口)的进程,其输入结果中的各项说明如下:

  • PID 是进程的标识号。
  • TTY 是进程所属的终端控制台。
  • TIME 列是进程所使用的总的 CPU 时间。
  • CMD 列是正在执行的命令行。

# 2. ps -ef

[root@localhost ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2024 ?        00:01:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0  2024 ?        00:00:00 [kthreadd]
root         4     2  0  2024 ?        00:00:00 [kworker/0:0H]
root         6     2  0  2024 ?        00:05:39 [ksoftirqd/0]
root         7     2  0  2024 ?        00:00:21 [migration/0]
root         8     2  0  2024 ?        00:00:00 [rcu_bh]
root         9     2  0  2024 ?        01:09:28 [rcu_sched]
root        10     2  0  2024 ?        00:00:00 [lru-add-drain]
root        11     2  0  2024 ?        00:00:23 [watchdog/0]
root        12     2  0  2024 ?        00:00:19 [watchdog/1]
root        13     2  0  2024 ?        00:00:22 [migration/1]
root        14     2  0  2024 ?        00:01:29 [ksoftirqd/1]
root        16     2  0  2024 ?        00:00:00 [kworker/1:0H]
root        18     2  0  2024 ?        00:00:00 [kdevtmpfs]
root        19     2  0  2024 ?        00:00:00 [netns]
root        20     2  0  2024 ?        00:00:03 [khungtaskd]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

输出信息中各列说明如下:

  • UID:进程被该 UID 所拥有。
  • PID:进程的标志号。
  • PPID:进程的父进程的标志号。
  • C:CPU使用的资源百分比。
  • STIME:进程开始的时间。
  • TTY:该进程是在哪个终端机上面运作,若与终端无关,则显示 "?" ,另外,tty1-tty6 是本机上面的登入者进程,若为 pts/0 等,则表示为由网络连接进主机的进程。
  • TIME:进程所使用的总的 CPU 时间。
  • CMD:正在执行的命令行。

ps 常常与 grep 组合使用,用于查找特定的进程。

# 3. ps aux

这里使用 BSD 语法格式显示每个进程信息。

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 191888  3828 ?        Ss    2024   1:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S     2024   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<    2024   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S     2024   5:39 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S     2024   0:21 [migration/0]
root         8  0.0  0.0      0     0 ?        S     2024   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S     2024  69:28 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<    2024   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S     2024   0:23 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S     2024   0:19 [watchdog/1]
root        13  0.0  0.0      0     0 ?        S     2024   0:22 [migration/1]
root        14  0.0  0.0      0     0 ?        S     2024   1:29 [ksoftirqd/1]
root        16  0.0  0.0      0     0 ?        S<    2024   0:00 [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S     2024   0:00 [kdevtmpfs]
root        19  0.0  0.0      0     0 ?        S<    2024   0:00 [netns]
root        20  0.0  0.0      0     0 ?        S     2024   0:03 [khungtaskd]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

输出信息中各列说明如下:

  • USER:该进程属于的用户。
  • PID:该进程的进程号。
  • %CPU:该进程使用掉的CPU资源百分比。
  • %MEM:该进程所占用的物理内存百分比。
  • VSZ:该进程使用掉的虚拟内存量(单位为 Kbytes)。
  • RSS:该进程占用的固定的内存量(单位为Kbytes)。
  • TTY:该进程是在哪个终端机上面运作的,若与终端机无关,则显示 “?” ,另外,tty1-tty6 是本机上面的登入者进程,若为 pts/0 等,则表示为由网络连接进主机进程。
  • STAT:该进程目前的状态,主要的状态包括如下几种。
    • R:正在运行,或者是可以运行。
    • S:正在中断睡眠中,可以由某些信号唤醒。
    • D:不可中断睡眠。
    • T:正在侦测或者是停止了。
    • Z:已经终止了,但是其父进程无法正常终止它,从而变成僵尸🧟‍♀️进程的状态。
    • +:前台进程。
    • l:多线程进程。
    • N:低优先级进程。
    • <:高优先级进程。
    • s:进程领导者。
    • L:已将页面锁定到内存中。
  • START:该进程被触发启动的时间。
  • TIME:该进程实际使用CPU运行的时间。
  • COMMAND:该进程的实际命令。

提示

Linux上进程的5种状态

  • 运行(正在运行或在运行队列中等待)
  • 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  • 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

# 4. ps -u root

显示指定用户的相关进程

[root@localhost ~]# ps -u root
  PID TTY          TIME CMD
    1 ?        00:01:42 systemd
    2 ?        00:00:00 kthreadd
    4 ?        00:00:00 kworker/0:0H
    6 ?        00:05:40 ksoftirqd/0
    7 ?        00:00:21 migration/0
    8 ?        00:00:00 rcu_bh
1
2
3
4
5
6
7
8

# 5. ps -l

详细显示进程状况

[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 R     0 17643 24270  0  80   0 - 38324 -      pts/0    00:00:00 ps
4 S     0 24270 24266  0  80   0 - 29151 do_wai pts/0    00:00:00 bash
1
2
3
4

# 6. 显示进程树

[root@localhost ~]# ps -eH   # UNIX 格式,使用-e参数显示所有进程,-H显示进程树
......
 1083 ?        00:00:22   master
 1098 ?        00:00:04     qmgr
11423 ?        00:00:00     pickup
 1201 ?        00:06:23   rsyslogd
 1209 ?        00:00:00   atd
 1214 ?        00:00:13   crond
 1215 tty1     00:00:00   agetty
 1216 ttyS0    00:00:00   agetty
 1490 ?        00:00:07   sshd
24266 ?        00:00:04     sshd
24270 pts/0    00:00:00       bash
 7703 pts/0    00:00:00         ps
25507 ?        00:00:09       bash
 7702 ?        00:00:00         sleep
24268 ?        00:00:00     sshd
......
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# ps axf  # BSD格式,a和x显示所有进程,f显示进程树
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    4 ?        S<     0:00  \_ [kworker/0:0H]
    6 ?        S      5:40  \_ [ksoftirqd/0]
    7 ?        S      0:21  \_ [migration/0]
    8 ?        S      0:00  \_ [rcu_bh]
    9 ?        S     69:34  \_ [rcu_sched]
   10 ?        S<     0:00  \_ [lru-add-drai
1
2
3
4
5
6
7
8
9

提示

或者使用 pstree 命令

# 7. 输出指定字段

  1. AIX 格式:ps -eo "%p %y %x %c"

    语法说明:-e 是显示所有进程,-o 表示可以自定义输出指定的字段,以逗号分隔,其支持的字段见下面的代码:

    AIX FORMAT DESCRIPTORS
    	   代码   标准含义   命令行表头内容
           CODE   NORMAL   HEADER
           %C     pcpu     %CPU
           %G     group    GROUP
           %P     ppid     PPID
           %U     user     USER
           %a     args     COMMAND
           %c     comm     COMMAND
           %g     rgroup   RGROUP
           %n     nice     NI
           %p     pid      PID
           %r     pgid     PGID
           %t     etime    ELAPSED
           %u     ruser    RUSER
           %x     time     TIME
           %y     tty      TTY
           %z     vsz      VSZ
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  2. 标准格式:ps -eo pid, user, args --sort pid

    可以使用man ps 搜索 STANDARD FORMAT SPECIFIERS 详细了解

    通常ps 命令可以使用--sort 排序,例如

    --sort=-%cpu  # 按照CPU占用率排序  - 号表示降序排序
    --sort=-%mem  # 按照内存占用率排序
    --sort=-rss   # 按照内存占用大小
    
    1
    2
    3

下面是几个常用的查询例子:

  1. 查看指定进程的CPU和内存等信息占用

    ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,rss
    
    1
  2. 给输出排序

    ps aux --sort=-%cpu
    
    ps aux --sort=-%mem
    
    1
    2
    3
  3. 给RSS转换为更容易理解的格式

    ps -p <PID> -o rss | tail -n +2 | numfmt --to=iec
    
    1

# pstree:显示进程状态树

语法格式:

pstree [option] [<PID>/<user>]
1

# 常用选项

  • -p:显示每个进程的 PID

    pstree -p
    
    1
  • -u:显示每个进程的所属用户

    pstree -u
    
    1
  • -a:显示每个进程的完整命令行

    pstree -a
    
    1
  • -c: 如果有重复的进程名,则分开列出(默认情况下会合并)。

    pstree -c
    
    1
  • -g: 以进程组为单位显示进程树。

    pstree -g
    
    1
  • -s: 只显示指定进程及其子进程。

    pstree -s <PID>
    
    1

# pgrep:查找匹配条件的进程

pgrep 用于根据进程名或其他属性查找正在运行的进程的 PID。

语法格式:

pgrep [option] [pattern]
1

选项:

-d, --delimiter <string>:指定输出的分隔符。
-l, --list-name:列出进程ID和进程名称。
-a, --list-full:列出进程ID和完整的命令行。
-v, --inverse:反向匹配,即只显示不匹配的进程。
-w, --lightweight:列出所有TID(轻量级线程)。
-c, --count:显示匹配的进程数量。
-f, --full:使用完整的进程名称进行匹配。
-g, --pgroup <PGID,...>:匹配指定的进程组ID。
-G, --group <GID,...>:匹配真实组ID。
-i, --ignore-case:忽略大小写进行匹配。
-n, --newest:选择最近启动的进程。
-o, --oldest:选择最早启动的进程。
-O, --older <seconds>:选择启动时间早于指定秒数的进程。
-P, --parent <PPID,...>:只匹配给定父进程的子进程。
-s, --session <SID,...>:匹配会话ID。
-t, --terminal <tty,...>:根据控制终端进行匹配。
-u, --euid <ID,...>:根据有效用户ID进行匹配。
-U, --uid <ID,...>:根据真实用户ID进行匹配。
-x, --exact:精确匹配进程名称。
-F, --pidfile <file>:从文件中读取PID。
-L, --logpidfile:如果PID文件没有锁定,则失败。
-r, --runstates <state>:匹配运行状态(D, S, Z等)。
--ns <PID>:匹配与指定PID相同命名空间的进程。
--nslist <ns,...>:列出将在 --ns 选项中考虑的命名空间。可用的命名空间包括:ipc、mnt、net、pid、user、uts。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#进程管理
上次更新: 2025/05/06, 13:52:56
top 命令介绍

top 命令介绍→

最近更新
01
find 命令介绍
05-06
02
交换分区的配置
04-09
03
top 命令介绍
04-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Zhou Chuang 版权所有| 鲁ICP备2021031629号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式