Linux 中的 ps 命令示例
众所周知,Linux 是一个多任务和多用户系统。因此,它允许多个进程同时运行而不会相互干扰。进程是 Linux 操作系统的重要基本概念之一。进程是程序的一个执行实例,在操作系统中执行不同的任务。
Linux 为我们提供了一个名为ps的实用程序,用于查看与系统上的进程相关的信息,它是“进程状态”的缩写。 ps 命令用于列出当前正在运行的进程及其 PID 以及一些其他信息,具体取决于不同的选项。它从 /proc文件系统中的虚拟文件中读取进程信息。 /proc 包含虚拟文件,这就是它被称为虚拟文件系统的原因。
ps 提供了许多选项来根据我们的需要操作输出。
句法 -
ps [options]
ps 命令的选项:
- 简单的进程选择:显示当前 shell 的进程 -
[root@rhel7 ~]# ps PID TTY TIME CMD 12330 pts/0 00:00:00 bash 21621 pts/0 00:00:00 ps
结果包含四列信息。
在哪里,
PID –唯一的进程 ID
TTY –用户登录的终端类型
TIME –进程已运行的 CPU 数量(以分钟和秒为单位)
CMD -启动进程的命令的名称。注意 –有时当我们执行ps命令时,它会显示 TIME 为 00:00:00。它只不过是任何进程的总累积 CPU 使用时间,00:00:00 表示内核到目前为止还没有给出 CPU 时间。在上面的例子中我们发现,对于 bash 没有给出 CPU 时间。这是因为 bash 只是需要 bash 执行的不同进程的父进程,而 bash 本身直到现在还没有使用任何 CPU 时间。
- 查看进程:查看所有正在运行的进程使用以下选项之一与 ps –
[root@rhel7 ~]# ps -A [root@rhel7 ~]# ps -e
- 查看与终端无关的进程:查看除会话领导者和与终端无关的进程之外的所有进程。
[root@rhel7 ~]# ps -a PID TTY TIME CMD 27011 pts/0 00:00:00 man 27016 pts/0 00:00:00 less 27499 pts/1 00:00:00 ps
注意 –您可能在想什么是会话领导者?一个独特的会话正在分配给每个进程组。因此,会话领导者是一个启动其他进程的进程。任何会话的第一个进程的进程 ID 与会话 ID 类似。
- 查看除会话负责人以外的所有进程:
[root@rhel7 ~]# ps -d
- 查看除满足指定条件的所有进程(否定选择):
示例 –如果您只想查看与终端无关的会话领导者和进程。然后,运行[root@rhel7 ~]# ps -a -N OR [root@rhel7 ~]# ps -a --deselect
- 查看与此终端关联的所有进程:
[root@rhel7 ~]# ps -T
- 查看所有正在运行的进程:
[root@rhel7 ~]# ps -r
- 查看您拥有的所有进程:进程即与 ps 相同的 EUID,这意味着 ps 命令的运行者,在这种情况下为 root –
[root@rhel7 ~]# ps -x
流程选择列表
这里我们将讨论如何借助 ps 命令来获取特定进程列表。这些选项接受以空格分隔或逗号分隔的列表形式的单个参数。它们可以多次使用。
例如: ps -p “1 2” -p 3,4
- 通过命令名称选择进程。这将选择其可执行名称在 cmdlist 中给出的进程。您可能不知道进程 ID,使用此命令可以更轻松地进行搜索。
语法: ps -C command_nameSyntax : ps -C command_name Example : [root@rhel7 ~]# ps -C dhclient PID TTY TIME CMD 19805 ? 00:00:00 dhclient
- 按组 ID 或名称选择。组 ID 标识创建进程的用户的组。
Syntax : ps -G group_name ps --Group group_name Example : [root@rhel7 ~]# ps -G root
- 按组 ID 查看:
Syntax : ps -g group_id ps -group group_id Example : [root@rhel7 ~]# ps -g 1 PID TTY TIME CMD 1 ? 00:00:13 systemd
- 按进程 ID 查看进程。
Syntax : ps p process_id ps -p process_id ps --pid process_id Example : [root@rhel7 ~]# ps p 27223 PID TTY STAT TIME COMMAND 27223 ? Ss 0:01 sshd: root@pts/2 [root@rhel7 ~]# ps -p 27223 PID TTY TIME CMD 27223 ? 00:00:01 sshd [root@rhel7 ~]# ps --pid 27223 PID TTY TIME CMD 27223 ? 00:00:01 sshd
您可以通过指定以空格或逗号分隔的多个进程 ID 来查看多个进程 –
例子 :[root@rhel7 ~]# ps -p 1 904 27223 PID TTY STAT TIME COMMAND 1 ? Ss 0:13 /usr/lib/systemd/systemd --switched-root --system --d 904 tty1 Ssl+ 1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r 27223 ? Ss 0:01 sshd: root@pts/2
在这里,我们提到了三个进程 ID——1、904 和 27223,它们以空格分隔。
- 按父进程 ID 选择。使用该命令可以查看除父进程之外的所有父进程所拥有的进程。
[root@rhel7 ~]# ps -p 766 PID TTY TIME CMD 766 ? 00:00:06 NetworkManager [root@rhel7 ~]# ps --ppid 766 PID TTY TIME CMD 19805 ? 00:00:00 dhclient
在上面的示例中,进程 ID 766被分配给 NetworkManager,这是进程 ID 为 19805 的 dhclient 的父进程。
- 查看属于任何会话ID的所有进程。
Syntax : ps -s session_id ps --sid session_id Example : [root@rhel7 ~]# ps -s 1248 PID TTY TIME CMD 1248 ? 00:00:00 dbus-daemon 1276 ? 00:00:00 dconf-service 1302 ? 00:00:00 gvfsd 1310 ? 00:00:00 gvfsd-fuse 1369 ? 00:00:00 gvfs-udisks2-vo 1400 ? 00:00:00 gvfsd-trash 1418 ? 00:00:00 gvfs-mtp-volume 1432 ? 00:00:00 gvfs-gphoto2-vo 1437 ? 00:00:00 gvfs-afc-volume 1447 ? 00:00:00 wnck-applet 1453 ? 00:00:00 notification-ar 1454 ? 00:00:02 clock-applet
- 按 tty 选择。这将选择与提到的 tty 关联的进程:
Syntax : ps t tty ps -t tty ps --tty tty Example : [root@rhel7 ~]# ps -t pts/0 PID TTY TIME CMD 31199 pts/0 00:00:00 bash 31275 pts/0 00:00:00 man 31280 pts/0 00:00:00 less
- 按有效用户 ID 或名称选择。
句法 :
ps U 用户名/ID
ps -U 用户名/ID
ps -u 用户名/ID
ps –用户用户名/ID
ps –user 用户名/ID输出格式控制
这些选项用于选择ps显示的信息。有多种选项可以控制输出格式。这些选项可以与任何其他选项结合使用,如e、u、p、G、g等,这取决于我们的需要。
- 使用-f查看完整格式的列表。
[tux@rhel7 ~]$ ps -af tux 17327 17326 0 12:42 pts/0 00:00:00 -bash tux 17918 17327 0 12:50 pts/0 00:00:00 ps -af
- 使用-F查看额外的完整格式。
[tux@rhel7 ~]$ ps -F UID PID PPID C SZ RSS PSR STIME TTY TIME CMD tux 17327 17326 0 28848 2040 0 12:42 pts/0 00:00:00 -bash tux 17942 17327 0 37766 1784 0 12:50 pts/0 00:00:00 ps -F
- 根据用户定义的格式查看进程。
Syntax : [root@rhel7 ~]# ps --formate column_name [root@rhel7 ~]# ps -o column_name [root@rhel7 ~]# ps o column_name Example : [root@rhel7 ~]# ps -aN --format cmd,pid,user,ppid CMD PID USER PPID /usr/lib/systemd/systemd -- 1 root 0 [kthreadd] 2 root 0 [ksoftirqd/0] 3 root 2 [kworker/0:0H] 5 root 2 [migration/0] 7 root 2 [rcu_bh] 8 root 2 [rcu_sched] 9 root 2 [watchdog/0] 10 root 2
在这个例子中,我希望看到命令、进程 ID、用户名和父进程 ID,所以我分别传递了参数 cmd、pid、user 和 ppid。
- 以 BSD 作业控制格式查看:
[root@rhel7 ~]# ps -j PID PGID SID TTY TIME CMD 16373 16373 16373 pts/0 00:00:00 bash 19734 19734 16373 pts/0 00:00:00 ps
- 显示 BSD 长格式:
[root@rhel7 ~]# ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 904 826 20 0 306560 51456 ep_pol Ssl+ tty1 1:32 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/run/lightdm/root/:0 -noli 4 0 11692 11680 20 0 115524 2132 do_wai Ss pts/2 0:00 -bash
- 添加一列安全数据。
[root@rhel7 ~]# ps -aM LABEL PID TTY TIME CMD unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19534 pts/2 00:00:00 man unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19543 pts/2 00:00:00 less unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 20469 pts/0 00:00:00 ps
- 查看带有信号格式的命令。
[root@rhel7 ~]# ps s 766
- 显示面向用户的格式
[root@rhel7 ~]# ps u 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 128168 6844 ? Ss Apr08 0:16 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
- 显示虚拟内存格式
[root@rhel7 ~]# ps v 1 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1 ? Ss 0:16 62 1317 126850 6844 0.6 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
- 如果您想查看任何命令的环境。然后使用选项 **e** –
[root@rhel7 ~]# ps ev 766 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 766 ? Ssl 0:08 47 2441 545694 10448 1.0 /usr/sbin/NetworkManager --no-daemon LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
- 查看使用最高内存的进程。
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
12 –打印进程树
[root@rhel7 ~]# ps --forest -C sshd PID TTY TIME CMD 797 ? 00:00:00 sshd 11680 ? 00:00:03 \_ sshd 16361 ? 00:00:02 \_ sshd
- 列出特定进程的所有线程。使用-T 或 -L选项显示进程的线程。
[root@rhel7 ~]# ps -C sshd -L PID LWP TTY TIME CMD 797 797 ? 00:00:00 sshd 11680 11680 ? 00:00:03 sshd 16361 16361 ? 00:00:02 sshd
注 –有关不同列内容的说明,请参阅手册页。
参考:手册页
- 使用-f查看完整格式的列表。