📜  Linux 中的 ps 命令示例

📅  最后修改于: 2022-05-13 01:57:32.878000             🧑  作者: Mango

Linux 中的 ps 命令示例

众所周知,Linux 是一个多任务和多用户系统。因此,它允许多个进程同时运行而不会相互干扰。进程是 Linux 操作系统的重要基本概念之一。进程是程序的一个执行实例,在操作系统中执行不同的任务。

Linux 为我们提供了一个名为ps的实用程序,用于查看与系统上的进程相关的信息,它是“进程状态”的缩写。 ps 命令用于列出当前正在运行的进程及其 PID 以及一些其他信息,具体取决于不同的选项。它从 /proc文件系统中的虚拟文件中读取进程信息。 /proc 包含虚拟文件,这就是它被称为虚拟文件系统的原因。

ps 提供了许多选项来根据我们的需要操作输出。

句法 -

ps [options]

ps 命令的选项:



  1. 简单的进程选择:显示当前 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 时间。

  2. 查看进程:查看所有正在运行的进程使用以下选项之一与 ps –
    [root@rhel7 ~]# ps -A
    [root@rhel7 ~]# ps -e
    
  3. 查看与终端无关的进程:查看除会话领导者和与终端无关的进程之外的所有进程。
    [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 类似。

  4. 查看除会话负责人以外的所有进程:
    [root@rhel7 ~]# ps -d
    
  5. 查看除满足指定条件的所有进程(否定选择):
    示例 –如果您只想查看与终端无关的会话领导者和进程。然后,运行
    [root@rhel7 ~]# ps -a -N
    OR
    [root@rhel7 ~]# ps -a --deselect
    
  6. 查看与此终端关联的所有进程:
    [root@rhel7 ~]# ps -T
    
  7. 查看所有正在运行的进程:
    [root@rhel7 ~]# ps -r
    
  8. 查看您拥有的所有进程:进程即与 ps 相同的 EUID,这意味着 ps 命令的运行者,在这种情况下为 root –
    [root@rhel7 ~]# ps -x
    

流程选择列表

这里我们将讨论如何借助 ps 命令来获取特定进程列表。这些选项接受以空格分隔或逗号分隔的列表形式的单个参数。它们可以多次使用。
例如: ps -p “1 2” -p 3,4

  1. 通过命令名称选择进程。这将选择其可执行名称在 cmdlist 中给出的进程。您可能不知道进程 ID,使用此命令可以更轻松地进行搜索。
    语法: ps -C command_name
    Syntax :
    ps -C command_name
    
    Example :
    [root@rhel7 ~]# ps -C dhclient
      PID TTY          TIME CMD
    19805 ?        00:00:00 dhclient
    
  2. 按组 ID 或名称选择。组 ID 标识创建进程的用户的组。
    Syntax :
    ps -G group_name
    ps --Group group_name
    
    Example :
    [root@rhel7 ~]# ps -G root
    
  3. 按组 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
    
  4. 按进程 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,它们以空格分隔。

  5. 按父进程 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 的父进程。

  6. 查看属于任何会话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
    
  7. 按 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
    
  8. 按有效用户 ID 或名称选择。
    句法 :
    ps U 用户名/ID
    ps -U 用户名/ID
    ps -u 用户名/ID
    ps –用户用户名/ID
    ps –user 用户名/ID

    输出格式控制

    这些选项用于选择ps显示的信息。有多种选项可以控制输出格式。这些选项可以与任何其他选项结合使用,如e、u、p、G、g等,这取决于我们的需要。

    1. 使用-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
      
    2. 使用-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
      
    3. 根据用户定义的格式查看进程。
      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。

    4. 以 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
      
    5. 显示 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
      
    6. 添加一列安全数据。
      [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
      
    7. 查看带有信号格式的命令。
      [root@rhel7 ~]# ps s 766
      
    8. 显示面向用户的格式
      [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
      
    9. 显示虚拟内存格式
      [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
      
    10. 如果您想查看任何命令的环境。然后使用选项 **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
      
    11. 查看使用最高内存的进程。
      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
      
    12. 列出特定进程的所有线程。使用-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
      

      注 –有关不同列内容的说明,请参阅手册页。

    参考:手册