5

Linux 中关于 ps 命令的一些常用例子

 1 year ago
source link: https://www.51cto.com/article/722412.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Linux 中关于 ps 命令的一些常用例子

作者:刘光录 2022-11-09 19:02:10
Linux 中的 ps 命令可以显示系统中正在运行的进程信息。本文将介绍一些关于 ps 命令最常用的例子
082c29f34fcba9f1dda8454e4dfb46317306f9.jpg

ps 命令是什么?

Linux 中的 ps 命令可以显示系统中正在运行的进程信息,比如进程ID等。它是一个应用很广泛的工具,有大约80多个选项,足见它的复杂性。本文将介绍一些关于 ps 命令最常用的例子。

ps命令在Linux中的基本用法

不带任何选项的 ps 命令,显示当前 shell 中正在运行的进程:

ps

下面是输出,我在后台发送了 gedit 命令,所以它显示了三个进程,否则你通常只会看到 ps 和 bash。​

 PID TTY          TIME CMD
  503 pts/0    00:00:00 gedit
 2053 pts/0    00:00:00 ps
31585 pts/0    00:00:00 bash
  • PID 是进程的唯一 进程ID;
  • TTY 是用户登录的终端类型。pts表示伪终端;
  • TIME 显示进程已运行的时间;
  • CMD 是用以启动进程的命令。

当然,这个例子不能提供任何真正有用的信息,下面我们来看一些 ps 命令的更实用的例子。

1. 查看所有正在运行的进程

如果要查看自己运行的所有进程,可以使用选项 x:

ps -x

x 选项将显示所有进程,即使它们不与当前 tty(终端类型)关联,或者它们没有控制终端(如守护进程)。

选项前面的中划线 - 是可选的,但一般在 Linux 中约定使用它,所以最好带上中划线 - 。

以下是其中一部分输出(我省略了一些,因为它总共有数百行):​

 PID TTY      STAT   TIME COMMAND
  503 pts/0    Sl     0:00 gedit
 2245 ?        S      0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
 3039 ?        Ss     0:00 /lib/systemd/systemd --user
 3040 ?        S      0:00 (sd-pam)
 3054 ?        SLl    0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
 3059 tty2     Ssl+   0:00 /usr/lib/gdm3/gdm-x-session --run-script env

上述输出中的 STAT 表示进程状态码(Process State Code),你可以在 ps 的 man 手册中查看其详细信息。

不过我们很少会看到 ps 只使用 -x 选项,通常会与选项 -u 一起使用:

ps -ux

使用选项 -u,可以看到每个进程的详细信息:​

USER   PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
gliu   503  0.0  0.4 681580 37516 pts/0    Sl   18:09   0:00 gedit
gliu  2245  0.0  0.0  11300  1496 ?        S    18:37   0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
gliu  3039  0.0  0.0  77344  3508 ?        Ss   10:37   0:00 /lib/systemd/systemd --user
gliu  3040  0.0  0.0 114632   360 ?        S    10:37   0:00 (sd-pam)
gliu  3054  0.0  0.1 517104 11512 ?        SLl  10:37   0:01 /usr/bin/gnome-keyring-daemon

​上面输出中,可以看到每个进程的用户名、CPU消耗和内存使用情况等。RSS显示进程当前在 RAM 中有多少内存,而 VSZ 则显示进程总共有多少虚拟内存。

2. 使用 ps aux 命令查看所有正在运行的进程

你可能在 Linux 教程或文档中经常看到 px -aux 或者 px aux 这样的例子。

通过使用 -a 选项,可以看到 Linux 系统中所有用户正在运行的进程。

ps -aux

其输出与 ps -ux 相同,但也包含了其他用户的进程,-u 选项可以让你看到进程所属用户。

图片

3. 使用 ps -ef 查看正在运行的进程

除了 ps -aux 之外,还可以使用 -e 选项列出所有正在运行的进程,然后在结合 -f 选项,以获得运行进程的完整列表:

ps -ef

这里请注意 e 前面的中划线 - 很重要,如果没有的话,会显示不同的结果。

此外还可以组合 H 选项,在线程视图中查看所有进程,其中子进程位于其父进程下:

ps -efH

4. 查看特定用户的进程

要查看某个用户正在运行的进程,可以使用 -U 选项后跟用户名:

ps -U user_name

比如,查看 root 用户运行的进程:​

ps -U root
  PID TTY          TIME CMD
    1 ?        00:00:41 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 rcu_gp
    4 ?        00:00:00 rcu_par_gp
    8 ?        00:00:00 mm_percpu_wq
    9 ?        00:00:03 ksoftirqd/0
   10 ?        00:01:22 rcu_sched

5. 查看由组运行的所有进程

可以通过提供组名或组id,按组而不是用户对正在运行的进程进行分类:

ps -G group_name_or_id

还可以组合使用 f 选项以获得完整的列表,大家可以自己试试看看输出结果。

6. 获取程序的所有事件和 PID

ps 命令的一个基本用途是获取正在运行的程序的进程ID(PID)。比如当你要结束某个程序时,会搜索所有的程序事件,获取它们的PID,然后使用 kill 命令结束该进程。

ps -C program__name

比如,我要查询 apt 包管理器所运行的实例:

ps -C apt
  PID TTY          TIME CMD
11425 pts/1    00:00:00 apt

另外,也可以使用 ​​grep ​​​来获取类似的结果:

ps aux | grep program_name

7. 获取相关 PID 的进程信息

如果你有一个 PID,但是不知道它是属于哪个进程,可以使用 ps 命令来查询进程信息:

ps -pN

可以使用逗号来分割多个PID,进而查询多个进程信息:

ps -pN1,N2,N3

正如本文开始所说的,ps 是一个复杂且应用广泛的命令,本文所介绍的只是一些最常用的例子。关于其详细信息,大家可以查看 man 手册。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK