众所周知, 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
注意 -有关不同列内容的说明, 请参见手册页。
参考:手册页