文章目录
- 介绍
- 语法格式
- 常用选项
- 命令示例
- 示例 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,pcpuPID COMMAND %CPU1 systemd 0.02 kthreadd 0.03 rcu_gp 0.04 rcu_par_gp 0.06 kworker/0:0H 0.08 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 -APID TTY TIME CMD1 ? 00:12:36 systemd2 ? 00:00:02 kthreadd3 ? 00:00:00 rcu_gp4 ? 00:00:00 rcu_par_gp[root@htlwk0001host ~]# ps -aux # 也是查看所有的进程
示例 6,显示指定用户的进程信息
[root@htlwk0001host ~]# ps -u rootPID TTY TIME CMD1 ? 00:12:36 systemd2 ? 00:00:02 kthreadd3 ? 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 nginxPID TTY TIME CMD26556 ? 00:00:00 nginx414774 ? 00:00:23 nginx414775 ? 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 nginxPID USER COMMAND26556 root nginx414774 root nginx414775 root nginx
示例 14,重定义标签,即自定义显示栏的名称,或者说显示列的名称
[root@htlwk0001host ~]# ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,commPID USERNAME CPU_USAGE %MEM COMMAND1 root 0.0 0.2 systemd2 root 0.0 0.0 kthreadd3 root 0.0 0.0 rcu_gp4 root 0.0 0.0 rcu_par_gp
示例 15,显示进程运行的时间
[root@htlwk0001host ~]# ps -e -o pid,comm,etimePID COMMAND ELAPSED1 systemd 201-06:48:462 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 -axjfPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND0 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|moreUID PID PPID C STIME TTY TIME CMD0 1 0 0 8:13上午 ?? 1:15.47 /sbin/launchd0 57 1 0 8:13上午 ?? 0:03.13 /usr/sbin/syslogd0 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/uninstalld0 62 1 0 8:13上午 ?? 0:37.31 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd0 63 1 0 8:13上午 ?? 0:00.54 /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted0 65 1 0 8:13上午 ?? 12:57.99 /Applications/SunloginClient.app/Contents/MacOS/SunloginClient -m service0 67 1 0 8:13上午 ?? 0:48.33 /usr/sbin/systemstats --daemon
示例 24,按指定的字段来显示进程的信息
liaowenongdeair:bin root# ps -o pid,ppid,uid,tpgid,commPID PPID UID TPGID COMM1630 1599 0 3183 login1637 1631 0 3183 sudo1638 1637 0 3183 -bash3183 1638 0 3183 ps