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

系统 Linux
Linux 中的 ps 命令可以显示系统中正在运行的进程信息。本文将介绍一些关于 ps 命令最常用的例子

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 手册。

    责任编辑:庞桂玉 来源: TIAP
    相关推荐

    2010-03-11 14:16:16

    Linux route

    2022-02-17 13:58:38

    Linux技巧文件

    2013-06-26 14:00:40

    routeros软路由routero

    2011-07-13 09:13:56

    Android设计

    2010-09-28 14:14:19

    SQL语句

    2009-07-02 10:52:30

    JavaBean规范

    2011-03-15 17:46:43

    2010-01-15 10:34:59

    Linux命令行操作

    2023-02-10 09:46:04

    bash脚本变量

    2017-09-10 17:31:18

    iOS渲染数据

    2013-04-07 10:40:55

    前端框架前端

    2009-06-18 09:51:25

    Java继承

    2017-02-20 16:28:30

    DCISDN-WAN传输网络

    2010-04-19 14:37:14

    Oracle监控

    2019-08-19 14:56:07

    设计模式javascript

    2010-05-10 15:41:38

    Unix系统

    2013-12-06 17:39:49

    Linuxps命令

    2012-09-25 10:03:56

    JavaJava封面Java开发

    2009-06-04 09:14:32

    struts学习struts常用属性

    2011-03-11 09:27:11

    Java性能监控
    点赞
    收藏

    51CTO技术栈公众号