目录

5.3 ps

ps 命令

ps

ps [options]

  • 作用:ps 用于查看进程状态信息
  • 说明:ps 命令参数很乱,我们以常用命令的方式来说明其使用,下面只列出过滤参数
  • 过滤参数:
    • u user: 指定用户的所有进程
    • o [field1,field2…]: 指定显示的字段
    • k [-]field: 以指定字段排序
    • -h:去掉标题栏
    • -H: 显示线程详细信息
    • -f: 以树形结构显示进程间关系

pstree

1
2
3
4
5
6
7
# -t表示显示线程,-a表示显示命令行参数
$ pstree -t -a -p 27458
mysqld,27458 --log_bin=on --sync_binlog=1
...
  ├─{mysqld},27922
  ├─{mysqld},27923
  └─{mysqld},28014

ps aux f

ps aux f

  • 作用:显示所有进程,并显示进程树
  • 参数: a表示所有用户,u表示面向用户的扩展信息,x表示没有终端的进程
1
2
3
4
5
ps aux f
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    Feb11  33:45 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Feb11   2:21  \_ [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   Feb11   0:00  \_ [kworker/0:0H]

输出:

  • PID: 进程ID
  • %CPU: CPU 使用率
  • %MEM: 常驻内存占用百分比
  • VSZ: 虚拟内存大小
  • RSS: 常驻内存大小
  • TTY: 所属终端
  • STAT: 进程的状态:
  • TIME: 进程使用的总cpu时间
  • COMMAND: 启动命令

说明: RSS 显示主存使用,它也包括如系统库在内的映射共享段,可能会被几十个进程共享。如果 RSS 求和,可能会发现超过系统可用内存,这是由于重复计算了共享内存。分析共享内存可以使用 pmap 命令。

ps -efT

ps -efT

  • 作用: 显示所有线程信息
  • 参数: e 表示所有进程,f 表示完整信息,T 表示显示线程
1
2
3
4
5
ps -efT|head
UID         PID   SPID   PPID  C STIME TTY          TIME CMD
root          1      1      0  0 11:44 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      2      0  0 11:44 ?        00:00:00 [kthreadd]
root          3      3      2  0 11:44 ?        00:00:00 [ksoftirqd/0]

指标含义:

  1. SPID: 线程ID

ps -efl

ps -efl

  • 作用: 显示所有进程
  • 参数: e 表示所有进程,f 表示完整信息
1
2
3
ps -efl k -rss|head -10
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY        TIME CMD
4 S analyzer  58379  58363 99  80   0 - 585639778 futex_ Feb29 ?    30277:59 /opt/jdk-10.0.2/bin/java

输出:

  • UID: 用户ID(effective User ID)
  • PID: 进程ID(Process ID)
  • PPID: 父进程的进程ID(Parent Process id)
  • C: cpu 使用率,百分比但没有 %
  • PRI:进程优先级
  • NI: Nice 值
  • ADDR: 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-”
  • SZ: 使用掉的内存大小
  • WCHAN:
  • STIME: 启动时间
  • TTY: 与进程关联的终端(tty)
  • TIME: 进程使用的总cpu时间
  • CMD: 正在执行的命令行命令

ps axZ

ps axZ

  • 作用: 显示进程的安全信息(selinux)
1
2
3
4
5
6
7
ps axZ|head -10
LABEL                              PID TTY      STAT   TIME COMMAND
system_u:system_r:init_t:s0          1 ?        Ss   138:29 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
system_u:system_r:kernel_t:s0        2 ?        S     33:45 [kthreadd]
system_u:system_r:kernel_t:s0        3 ?        S      2:21 [ksoftirqd/0]
system_u:system_r:kernel_t:s0        5 ?        S<     0:00 [kworker/0:0H]
system_u:system_r:kernel_t:s0        8 ?        S      3:23 [migration/0]

输出:

  • label: selinux 的进程标识

ps axjf

ps axjf

  • 作用: 显示进程树
1
2
3
4
5
6
ps axjf
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      2      0      0 ?            -1 S        0  33:46 [kthreadd]
     2      3      0      0 ?            -1 S        0   2:21  \_ [ksoftirqd/0]
     2      5      0      0 ?            -1 S<       0   0:00  \_ [kworker/0:0H]
     2      8      0      0 ?            -1 S        0   3:23  \_ [migration/0]

输出:

  • PPID: 父进程ID
  • PID: 进程ID
  • PGID: 进程组 ID,等于 leader 进程的pid
  • SID: session id
  • TTY: 进程关联的终端
  • TPGID: 后台进程组关联的终端id?
  • STAT: 进程状态
  • UID: effective User ID

ps -eo

自定义 ps 显示的列

1
2
3
4
5
6
7
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

ps -Ao pid,tt,user,fname,tmout,f,wchan

ps -eo pid,maj_flt,min_flt # 显示主次缺页异常数

ps -U root -u root u

ps -U root -u root u

  • 作用: 显示real user & effective user 为 root 的进程

ps -C syslogd -o pid=

  • 作用: 打印 syslogd 的进程 id

ps -q 42 -o comm=

  • 作用: 打印进程id 为 42 的进程名