Linux中的ps命令示例和指南

众所周知, Linux是一个多任务和多用户系统。因此, 它允许多个进程同时运行而不会互相干扰。进程是Linux OS的重要基本概念之一。进程是程序的执行实例, 在操作系统中执行不同的任务。
Linux为我们提供了一个名为ps用于查看与系统上进程相关的信息, 该系统是的缩写。"过程状态"。ps命令用于列出当前正在运行的进程及其PID, 以及一些其他信息, 取决于不同的选项。它从虚拟文件中读取过程信息/ proc文件系统。 / proc包含虚拟文件, 这就是它被称为虚拟文件系统的原因。
ps提供了许多根据我们的需求来操纵输出的选项。
句法 -

ps [options]

ps命令的选项:
简单的过程选择:
显示当前shell的过程–
[root@rhel7 ~]# psPID TTYTIME CMD12330 pts/000:00:00 bash21621 pts/000:00:00 ps

结果包含四列信息。
其中
PID –
唯一的进程ID
TTY –
用户登录的终端类型
时间 -
该进程已在运行的分钟数和秒数的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 -aPID TTYTIME CMD27011 pts/000:00:00 man27016 pts/000:00:00 less27499 pts/100:00:00 ps

注意 -你可能在想什么是会议负责人?唯一的会话正在评估每个进程组。因此, 会话负责人是一个开始其他过程的过程。任何会话的第一个进程的进程ID与会话ID相似。
查看除会议负责人以外的所有过程:
[root@rhel7 ~]# ps -d

查看除满足指定条件(取消选择)之外的所有过程:
示例–
如果你只想查看会话负责人和与终端不相关的进程。然后跑
[root@rhel7 ~]# ps -a -NOR[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命令名
Syntax :ps -C command_nameExample :[root@rhel7 ~]# ps -C dhclientPID TTYTIME CMD19805 ?00:00:00 dhclient

按组ID或名称选择。组ID标识创建进程的用户的组。语法:ps -G group_name ps --Group group_name示例:[root @ rhel7?]#ps -G root
按组ID查看:语法:ps -g group_id ps -group group_id示例:[root @ rhel7?]#ps -g 1 PID TTY TIME CMD 1吗? 00:00:13 systemd
按进程ID查看进程。
Syntax :ps p process_idps -p process_idps --pid process_idExample :[root@rhel7 ~]#ps p 27223PID TTYSTATTIME COMMAND27223 ?Ss0:01 sshd: root@pts/2[root@rhel7 ~]#ps -p 27223PID TTYTIME CMD27223 ?00:00:01 sshd[root@rhel7 ~]#ps --pid 27223PID TTYTIME CMD27223 ?00:00:01 sshd

你可以通过指定多个由空白或逗号分隔的进程ID来查看多个进程–
范例:
[root@rhel7 ~]#ps -p 1 904 27223PID TTYSTATTIME COMMAND1 ?Ss0:13 /usr/lib/systemd/systemd --switched-root --system --d904 tty1Ssl+1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r27223 ?Ss0: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。语法:ps -s session_id ps --sid session_id示例:[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时钟小程序
通过tty选择。这将选择与提到的tty相关的进程:语法:ps t tty ps -t tty ps --tty tty示例:[root @ rhel7?]#ps -t pts / 0 PID TTY TIME CMD 31199 pts / 0 00:00 :00 bash 31275点/ 0 00:00:00男士31280点/ 0 00:00:00少
通过有效的用户ID或名称选择。
句法 :
ps U用户名/ ID
ps -U用户名/ ID
ps -u用户名/ ID
ps –用户user_name / ID
ps –用户user_name / ID
输出格式控制
这些选项用于选择ps显示的信息。有多个选项可控制输出格式。这些选项可以与其他任何选项结合使用e, u, p, G, g等, 取决于我们的需要。
采用
-f
查看全格式列表。
[tux@rhel7 ~]$ ps -aftux17327 173260 12:42 pts/000:00:00 -bashtux17918 173270 12:50 pts/000:00:00 ps -af

采用
-F
查看Extra完整格式。
[tux@rhel7 ~]$ ps -FUIDPIDPPIDCSZRSS PSR STIME TTYTIME CMDtux17327 173260 2884820400 12:42 pts/000:00:00 -bashtux17942 173270 3776617840 12:50 pts/000:00:00 ps -F

根据用户定义的格式查看过程。
Syntax :[root@rhel7 ~]#ps --formate column_name[root@rhel7 ~]#ps -o column_name[root@rhel7 ~]#ps o column_nameExample :[root@rhel7 ~]#ps -aN --format cmd, pid, user, ppidCMDPID USERPPID/usr/lib/systemd/systemd --1 root0[kthreadd]2 root0[ksoftirqd/0]3 root2[kworker/0:0H]5 root2[migration/0]7 root2[rcu_bh]8 root2[rcu_sched]9 root2[watchdog/0]10 root2

在此示例中, 我希望看到命令, 进程ID, 用户名和父进程ID, 因此我分别传递了参数cmd, pid, user和ppid。
以BSD作业控制格式查看:
[root@rhel7 ~]# ps -jPIDPGIDSID TTYTIME CMD16373 16373 16373 pts/000:00:00 bash19734 19734 16373 pts/000:00:00 ps

【Linux中的ps命令示例和指南】显示BSD长格式:
[root@rhel7 ~]# ps lFUIDPIDPPID PRINIVSZRSS WCHANSTAT TTYTIME COMMAND40904826200 306560 51456 ep_pol Ssl+ tty11:32 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/run/lightdm/root/:0 -noli40 11692 11680200 1155242132 do_wai Sspts/20:00 -bash

添加一列安全数据。
[root@rhel7 ~]# ps -aMLABELPIDTTYTIMECMDunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19534 pts/2 00:00:00 manunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 19543 pts/2 00:00:00 lessunconfined_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 1USERPID %CPU %MEMVSZRSS TTYSTAT STARTTIME COMMANDroot10.00.6 1281686844 ?SsApr080:16 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

显示虚拟内存格式
[root@rhel7 ~]# ps v 1PID TTYSTATTIMEMAJFLTRSDRSRSS %MEM COMMAND1 ?Ss0:16621317 126850 68440.6 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

如果要查看任何命令的环境。然后使用选项** e ** –
[root@rhel7 ~]# ps ev 766PID TTYSTATTIMEMAJFLTRSDRSRSS %MEM COMMAND766 ?Ssl0:08472441 545694 104481.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 sshdPID TTYTIME CMD797 ?00:00:00 sshd11680 ?00:00:03\_ sshd16361 ?00:00:02\_ sshd

列出特定进程的所有线程。使用
-T或-L
显示进程线程的选项。
[root@rhel7 ~]# ps -C sshd -LPIDLWP TTYTIME CMD797797 ?00:00:00 sshd11680 11680 ?00:00:03 sshd16361 16361 ?00:00:02 sshd

注意 -有关不同列内容的说明, 请参见手册页。
参考:手册页

    推荐阅读