文章目录

  • 介绍
  • 语法格式
  • 常用选项
  • 命令示例
  • 示例 1,查看进程的 PID、名称以及 CPU 占用率
  • 示例 2,查看所有的进程
  • 示例 3,按内存资源的使用量对进程进行排序
  • 示例 4,按 CPU 资源的使用量对进程进行排序
  • 示例 5,显示所有进程信息
  • 示例 6,显示指定用户的进程信息
  • 示例 7,查看所有进程
  • 示例 8,显示所有进程信息,连同命令行
  • 示例 9,结合命令 grep 查看指定进程的信息
  • 示例 10,通过名字或命令查看指定进程信息
  • 示例 11,查看所有进程,并按 CPU 降序,内存升序
  • 示例 12,用树的风格显示进程的层次关系
  • 示例 13,显示一个父进程的子进程
  • 示例 14,重定义标签,即自定义显示栏的名称,或者说显示列的名称
  • 示例 15,显示进程运行的时间
  • 示例 16,查看指定进程的详细信息
  • 示例 17,通过进程 id 获取服务名称
  • 示例 18,将目前属于您自己这次登入的进程与相关信息列示出来
  • 字段说明
  • 示例 19,列出目前所有正在内存当中的程序
  • 字段说明
  • 示例 20,按程序树的形式来显示进程的信息
  • 示例 21,查看服务名称含有 cron 或者 syslog 的进程信息
  • 示例 22,把所有进程显示出来,并输出到 ps001.txt 文件
  • 示例 23,用管道符 | 管道和 more
  • 示例 24,按指定的字段来显示进程的信息


介绍

ps 命令是“process status”的缩写,ps 命令用于显示当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。

ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

语法格式

ps [选项]

常用选项

选项

说明

-a

显示所有终端机下执行的程序,除了阶段作业领导者之外。

a

显示现行终端机下的所有程序,包括其他用户的程序。

-A

显示所有程序。

-c

显示CLS和PRI栏位。

c

列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。

-C<指令名称>

指定执行指令的名称,并列出该指令的程序的状况。

-d

显示所有程序,但不包括阶段作业领导者的程序。

-e

此选项的效果和指定"A"选项相同。

e

列出程序时,显示每个程序所使用的环境变量。

-f

显示UID,PPIP,C与STIME栏位。

f

用ASCII字符显示树状结构,表达程序间的相互关系。

-g<群组名称>

此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。

g

显示现行终端机下的所有程序,包括群组领导者的程序。

-G<群组识别码>

列出属于该群组的程序的状况,也可使用群组名称来指定。

h

不显示标题列。

-H

显示树状结构,表示程序间的相互关系。

-j 或 j

采用工作控制的格式显示程序状况。

-l 或 l

采用详细的格式来显示程序状况。

L

列出栏位的相关信息。

-m 或 m

显示所有的执行绪。

n

以数字来表示USER和WCHAN栏位。

-N

显示所有的程序,除了执行ps指令终端机下的程序之外。

-p<程序识别码>

指定程序识别码,并列出该程序的状况。

p<程序识别码>

此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。

r

只列出现行终端机正在执行中的程序。

-s<阶段作业>

指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。

s

采用程序信号的格式显示程序状况。

S

列出程序时,包括已中断的子程序资料。

-t<终端机编号>

指定终端机编号,并列出属于该终端机的程序的状况。

t<终端机编号>

此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。

-T

显示现行终端机下的所有程序。

-u<用户识别码>

此选项的效果和指定"-U"选项相同。

u

以用户为主的格式来显示程序状况。

-U<用户识别码>

列出属于该用户的程序的状况,也可使用用户名称来指定。

U<用户名称>

列出属于该用户的程序的状况。

v

采用虚拟内存的格式显示程序状况。

-V 或 V

显示版本信息。

-w 或 w

采用宽阔的格式来显示程序状况。

x

显示所有程序,不以终端机来区分。

X

采用旧式的Linux i386登陆格式显示程序状况。

-y

配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。

-<程序识别码>

此选项的效果和指定"p"选项相同。

–cols<每列字符数>

设置每列的最大字符数。

–columns<每列字符数>

此选项的效果和指定"–cols"选项相同。

–cumulative

此选项的效果和指定"S"选项相同。

–deselect

此选项的效果和指定"-N"选项相同。

–forest

此选项的效果和指定"f"选项相同。

–headers

重复显示标题列。

–help

在线帮助。

–info

显示排错信息。

–lines<显示列数>

设置显示画面的列数。

–no-headers

此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。

–group<群组名称>

此选项的效果和指定"-G"选项相同。

–Group<群组识别码>

此选项的效果和指定"-G"选项相同。

–pid<程序识别码>

此选项的效果和指定"-p"选项相同。

–rows<显示列数>

此选项的效果和指定"–lines"选项相同。

–sid<阶段作业>

此选项的效果和指定"-s"选项相同。

–tty<终端机编号>

此选项的效果和指定"-t"选项相同。

–user<用户名称>

此选项的效果和指定"-U"选项相同。

–User<用户识别码>

此选项的效果和指定"-U"选项相同。

–version

此选项的效果和指定"-V"选项相同。

–widty<每列字符数>

此选项的效果和指定"-cols"选项相同。

命令示例

示例 1,查看进程的 PID、名称以及 CPU 占用率

[root@htlwk0001host ~]# ps axo pid,comm,pcpu
    PID COMMAND         %CPU
      1 systemd          0.0
      2 kthreadd         0.0
      3 rcu_gp           0.0
      4 rcu_par_gp       0.0
      6 kworker/0:0H     0.0
      8 mm_percpu_wq     0.0

示例 2,查看所有的进程

[root@htlwk0001host ~]# ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.2 179148  9780 ?        Ss    2020  12:36 /usr/lib/syst
root           2  0.0  0.0      0     0 ?        S     2020   0:02 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<    2020   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<    2020   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<    2020   0:00 [kworker/0:0H
root           8  0.0  0.0      0     0 ?        I<    2020   0:00 [mm_percpu_wq
root           9  0.0  0.0      0     0 ?        S     2020   0:05 [ksoftirqd/0]

示例 3,按内存资源的使用量对进程进行排序

[root@htlwk0001host ~]# ps aux | sort -rnk 4

示例 4,按 CPU 资源的使用量对进程进行排序

[root@htlwk0001host ~]# ps aux | sort -nk 3

示例 5,显示所有进程信息

[root@htlwk0001host ~]# ps -A
    PID TTY          TIME CMD
      1 ?        00:12:36 systemd
      2 ?        00:00:02 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp

[root@htlwk0001host ~]# ps -aux # 也是查看所有的进程

示例 6,显示指定用户的进程信息

[root@htlwk0001host ~]# ps -u root
    PID TTY          TIME CMD
      1 ?        00:12:36 systemd
      2 ?        00:00:02 kthreadd
      3 ?        00:00:00 rcu_gp

示例 7,查看所有进程

[root@htlwk0001host ~]# ps -efL
UID          PID    PPID     LWP  C NLWP STIME TTY          TIME CMD
root           1       0       1  0    1  2020 ?        00:12:36 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2       0       2  0    1  2020 ?        00:00:02 [kthreadd]
root           3       2       3  0    1  2020 ?        00:00:00 [rcu_gp]

示例 8,显示所有进程信息,连同命令行

[root@htlwk0001host ~]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0  2020 ?        00:12:36 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2       0  0  2020 ?        00:00:02 [kthreadd]
root           3       2  0  2020 ?        00:00:00 [rcu_gp]

示例 9,结合命令 grep 查看指定进程的信息

通过 ps 与 grep 的组合用法,查看进程 ssh 的信息:

[root@htlwk0001host ~]# ps -ef | grep ssh

示例 10,通过名字或命令查看指定进程信息

查看命令 nginx 的进程信息:

[root@htlwk0001host ~]# ps -C nginx
    PID TTY          TIME CMD
  26556 ?        00:00:00 nginx
 414774 ?        00:00:23 nginx
 414775 ?        00:00:00 nginx

示例 11,查看所有进程,并按 CPU 降序,内存升序

[root@htlwk0001host ~]# ps aux --sort=-pcpu,+pmem
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      545600  0.0  0.0  17832  1580 ?        Ssl  1月30   6:17 /usr/local/share/assist-daemon/assist_daemon
root      558809  0.0  0.0  13100  1596 tty5     Ss+  2月02   0:00 /sbin/agetty -o -p -- \u --noclear tty5 linux
root      558808  0.0  0.0  13100  1708 tty6     Ss+  2月02   0:00 /sbin/agetty -o -p -- \u --noclear tty6 linux
root      558810  0.0  0.0  13100  1756 tty4     Ss+  2月02   0:00 /sbin/agetty -o -p -- \u --noclear tty4 linux
root       34295  0.0  0.0  98700  1864 ?        Ss    2020   0:00 svnserve -d -r /opt/svn/qydpw/

注:- 表示降序,+ 表示升序

示例 12,用树的风格显示进程的层次关系

[root@htlwk0001host ~]# ps -f --forest -C nginx
UID          PID    PPID  C STIME TTY          TIME CMD
root       26556       1  0  2020 ?        00:00:00 nginx: master process nginx
root      414774   26556  0  2020 ?        00:00:23  \_ nginx: worker process
root      414775   26556  0  2020 ?        00:00:00  \_ nginx: worker process
[root@htlwk0001host ~]#

示例 13,显示一个父进程的子进程

[root@htlwk0001host ~]# ps -o pid,uname,comm -C nginx
    PID USER     COMMAND
  26556 root     nginx
 414774 root     nginx
 414775 root     nginx

示例 14,重定义标签,即自定义显示栏的名称,或者说显示列的名称

[root@htlwk0001host ~]# ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
    PID USERNAME CPU_USAGE %MEM COMMAND
      1 root           0.0  0.2 systemd
      2 root           0.0  0.0 kthreadd
      3 root           0.0  0.0 rcu_gp
      4 root           0.0  0.0 rcu_par_gp

示例 15,显示进程运行的时间

[root@htlwk0001host ~]# ps -e -o pid,comm,etime
    PID COMMAND             ELAPSED
      1 systemd         201-06:48:46
      2 kthreadd        201-06:48:46

示例 16,查看指定进程的详细信息

查看 named 进程的详细信息:

[root@htlwk0001host ~]# ps -aux | grep named
root      828974  0.0  0.0  12320  1068 pts/0    S+   16:51   0:00 grep --color=auto named
[root@htlwk0001host ~]#

示例 17,通过进程 id 获取服务名称

[root@htlwk0001host ~]# ps -o command -p 9 | sed -n 2p
[ksoftirqd/0]

示例 18,将目前属于您自己这次登入的进程与相关信息列示出来

[root@htlwk0001host ~]# ps -l
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0  828665  828664  0  80   0 -  7418 -      pts/0    00:00:00 bash
0 R     0  828984  828665  0  80   0 - 11404 -      pts/0    00:00:00 ps
字段说明
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有2个 PID。

F     # 代表这个程序的旗标 (flag), 例如:4 代表使用者为 super user
S     # 代表这个程序的状态 (STAT)
UID   # 进程所属用户 ID
PID   # 进程 ID
PPID  # 上级父程序的ID
C CPU # 使用的资源百分比
PRI   # 这个是 Priority (优先执行序) 的缩写
NI    # 这个是 Nice 值
ADDR  # 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ    # 使用掉的内存大小
WCHAN # 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY   # 登入者的终端机位置
TIME  # 使用掉的 CPU 时间
CMD   # 所下达的指令为何

示例 19,列出目前所有正在内存当中的程序

[root@htlwk0001host ~]# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.2 179148  9780 ?        Ss    2020  12:36 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2  0.0  0.0      0     0 ?        S     2020   0:02 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<    2020   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<    2020   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<    2020   0:00 [kworker/0:0H]
字段说明
USER    # 该 process 属于那个使用者账号的

PID     # 该 process 的编号

%CPU    # 该 process 使用掉的 CPU 资源百分比

%MEM    # 该 process 所占用的物理内存百分比

VSZ     # 该 process 使用掉的虚拟内存量 (Kbytes)
		  VSZ (Virtual Memory Size),表明是虚拟内存大小,表明了该进程可以访问的所有内存,包括被交换的内存和共享库内存。

RSS     # 该 process 占用的固定的内存量 (Kbytes)
          RSS( Resident Set Size )常驻内存集合大小,表示相应进程在RAM中占用了多少内存,并不包含在SWAP中占用的虚拟内存。
          在内存中使用的共享库的内存大小也一并计算在内,包含了完整的在stack和heap中的内存。
          
TTY     # 该 process 是在那个终端机上面运作,若与终端机无关,则显示问号 ?。
          另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
          
STAT    # 该程序目前的状态,主要的状态有:
		R    # 该程序目前正在运作,或者是可被运作
		S    # 该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
		T    # 该程序目前正在侦测或者是停止了
		Z    # 该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
		
START   # 该 process 被触发启动的时间

TIME    # 该 process 实际使用 CPU 运作的时间

COMMAND # 该程序的实际指令

示例 20,按程序树的形式来显示进程的信息

[root@htlwk0001host ~]# ps -axjf
   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
      0       2       0       0 ?             -1 S        0   0:02 [kthreadd]
      2       3       0       0 ?             -1 I<       0   0:00  \_ [rcu_gp]
      2       4       0       0 ?             -1 I<       0   0:00  \_ [rcu_par_gp]
      2       6       0       0 ?             -1 I<       0   0:00  \_ [kworker/0:0H]
      2       8       0       0 ?             -1 I<       0   0:00  \_ [mm_percpu_wq]
      2       9       0       0 ?             -1 S        0   0:05  \_ [ksoftirqd/0]
      2      10       0       0 ?             -1 I        0   9:12  \_ [rcu_sched]
      2      11       0       0 ?             -1 S        0   0:00  \_ [migration/0]
      2      12       0       0 ?             -1 S        0   0:00  \_ [watchdog/0]
      2      13       0       0 ?             -1 S        0   0:00  \_ [cpuhp/0]

示例 21,查看服务名称含有 cron 或者 syslog 的进程信息

[root@htlwk0001host ~]# ps aux | egrep '(cron|syslog)'
dbus         728  0.0  0.1  56448  5252 ?        Ss    2020   9:47 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root        1087  0.0  0.2 511332  9036 ?        Ssl   2020   5:32 /usr/sbin/rsyslogd -n
root        1096  0.0  0.0  36092  3516 ?        Ss    2020   0:10 /usr/sbin/crond -n
root      829022  0.0  0.0  12320  2448 pts/0    S+   17:10   0:00 grep -E --color=auto (cron|syslog)
[root@htlwk0001host ~]#

示例 22,把所有进程显示出来,并输出到 ps001.txt 文件

[root@htlwk0001host ~]# ps -aux > ps001.txt

示例 23,用管道符 | 管道和 more 连接起来分页查看所有的进程

liaowenongdeair:bin root# ps -ef|more
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0     1     0   0  8:13上午 ??         1:15.47 /sbin/launchd
    0    57     1   0  8:13上午 ??         0:03.13 /usr/sbin/syslogd
    0    58     1   0  8:13上午 ??         0:13.99 /usr/libexec/UserEventAgent (System)
    0    61     1   0  8:13上午 ??         0:01.70 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
    0    62     1   0  8:13上午 ??         0:37.31 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd
    0    63     1   0  8:13上午 ??         0:00.54 /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted
    0    65     1   0  8:13上午 ??        12:57.99 /Applications/SunloginClient.app/Contents/MacOS/SunloginClient -m service
    0    67     1   0  8:13上午 ??         0:48.33 /usr/sbin/systemstats --daemon

示例 24,按指定的字段来显示进程的信息

liaowenongdeair:bin root# ps -o pid,ppid,uid,tpgid,comm
  PID  PPID   UID TPGID COMM
 1630  1599     0  3183 login
 1637  1631     0  3183 sudo
 1638  1637     0  3183 -bash
 3183  1638     0  3183 ps