Linux中的ps命令示例和指南

2021年3月9日16:19:51 发表评论 930 次浏览

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

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 –

用户登录的终端类型

时间 -

该进程已在运行的分钟数和秒数的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命令名

Syntax :
ps -C command_name

Example :
[root@rhel7 ~]# ps -C dhclient
  PID TTY          TIME CMD
19805 ?        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_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。语法: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 -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

查看Extra完整格式。

[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

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

参考:手册页


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: