15个Linux ps 命令例子

PS是一个内置的的Unix/Linux操作系统来列出当前运行的进程使用的命令。它显示包含进程信息的静态快照,而 top、htop 和 Glances 显示重复更新。PS 命令带有许多操作输出的选项。它从 /proc 虚拟文件系统中提取进程的所有信息。

本教程将重点解释使用 ps 命令的方法以及一些实际示例

ps命令的语法

ps命令使用的基本语法如下:

$ ps [options]

ps命令
ps命令

ps 命令的“选项”可能是:

  • UNIX 选项 – 前面有一个破折号
  • BSD 选项 – 必须在没有破折号的情况下使用
  • GNU 长选项 – 前面有两个破折号

这是一个非常基本的 ps 命令用法。只需在控制台上键入“ps”即可查看结果:

$ ps

默认情况下,它向我们显示四列信息。

  • PID是运行命令(CMD)的进程ID
  • TTY是运行命令运行的地方
  • TIME 告诉在运行命令时 CPU 使用了多少时间
  • CMD 是作为当前进程运行的命令

不带任何选项运行 ps 命令只是该命令的一种最简单的格式,它返回的信息并不多。为了充分利用 ps 命令的强大功能,让我们使用其他选项运行它,这些选项将在以下各节中进一步详细说明。

显示所有进程(UNIX 格式)

要查看 Linux 系统中的所有进程,您可以运行以下任一命令:

$ ps -A

或者:

$ ps -e

ps -e 命令
ps -e 的输出

此外,为了列出所有正在运行的进程,请运行:

$ ps -r

ps -r 命令
ps -r 的输出

显示所有进程(BSD格式)

为了使用 BSD 格式的 ps 命令查看 Linux 系统上的所有进程,您可以运行以下命令:

$ ps ax

或者

$ ps aux

ps 辅助命令
ps 辅助输出

  • USER – 用户运行进程
  • PID – 进程 ID
  • %CPU / %MEM – 进程占用的 CPU / RAM 的百分比
  • VSZ – 进程占用的虚拟内存大小
  • RSS – 进程占用的物理内存大小
  • START – 开始时间
  • STAT – 进程的状态,其中:S(睡眠)、R(运行)、I(可中断睡眠)。
  • 时间 – 显示内核为该正在运行的进程提供了多长时间的 CPU 时间。
  • COMMAND – 作为当前进程运行的命令

显示由命令运行的所有进程

要列出由命令运行的所有进程,让我们使用以下语法:

$ ps -C 

例如,通过运行列出“/usr/sbin/kerneloops”命令的所有进程:

$ ps -C kerneloops

ps -C 命令
ps -C 的输出

您还可以以空格分隔或逗号分隔列表的形式使用参数,例如:

$ ps -C sshd,systemd

显示用户运行的所有进程

如果要按用户 ID 1000 的用户列出进程,请运行以下命令:

$ ps -u 1000

ps u 命令
您还可以按用户名搜索进程:

$ ps -U root -u root u

-U parameter 会选择由 real user ID (RUID)。它选择真实用户名或 ID 在用户列表列表中的进程。真实用户 ID 标识创建流程的用户。

-u paramater 将通过有效用户 ID (EUID) 进行选择

显示组拥有的进程

为了列出特定组名拥有的所有进程,让我们运行带有-fG选项的命令。例如:

$ ps -fG cas

ps -fG 命令
ps -fG 的输出

为了按组 ID 显示所有进程,您可以运行带有“-g”选项的命令。例如:

$ ps -g 1

输出:

   PID TTY          TIME CMD      1 ?        00:00:03 systemd

通过PID显示进程

您可以通过运行带有“-fp”选项的 ps 命令按 PID 列出所有进程。例如:

$ ps -fp 34531

输出:

UID         PID   PPID  C STIME TTY          TIME CMD
cas       34531      1  0 06:16 ?        00:00:00 /lib/systemd/systemd --user

此外,为了按 PPID 列出所有进程,让我们运行带有“–ppid”选项的命令:

$ ps -f --ppid 34529

输出:

UID         PID   PPID  C STIME TTY          TIME CMD
cas       34609  34529  0 06:16 ?        00:00:00 sshd: cas@pts/0

通过 TTY 显示进程

为了通过 TTY 显示所有进程,您可以运行带有“-t”选项的命令。例如:

$ ps -t tty1

ps -t tty1 命令
ps -t 的输出

显示当前用户拥有的进程

要列出当前用户正在运行的所有进程,让我们运行带有“-x”选项的命令:

$ ps -x

ps -x 命令
ps -x 的输出

以完整格式列表显示所有进程

例如,让我们运行带有-f选项的 ps 命令,以完整格式显示所有进程:

$ ps -af

ps -af 命令
ps -af 的输出

以额外的格式显示所有进程

此外,要查看结果的额外完整格式列表,请运行带有-F选项的ps 命令。例如:

$ ps -F

ps -F 命令
ps-F 的输出

以ASCII层级格式显示所有进程

为了说明,假设您想以 ASCII art 进程层次结构格式显示 Linux 系统上的所有进程,让我们运行:

$ ps af

输出将采用“森林”格式:

ps af 命令
ps af 的输出

加宽输出中的显示过程

如果要在运行 ps 命令时扩大输出,请使用w选项:

$ ps w

让我们比较一下运行 ‘ps w’ 和 ‘ps’ 的输出:

ps w 命令
输出 ps w 和 ps

根据用户定义的格式显示过程

您可以使用以下语法以用户定义的格式查看:

Syntax:
$ ps --format column_name
$ ps -o column_name
$ ps o column_name

For example:
$ ps -e -o user,pid,cmd

显示带有线程 id 的线程

例如,为了显示带有 SPID 列的线程(SPID 是线程 ID),请运行:

$ ps -aT

ps -aT 命令
ps -aT 的输出

显示线程信息

此外,您可以使用“-L”选项来获取有关 Linux 系统中线程的信息:

$ ps -aL

带有“LWP”列的输出显示线程 ID:

ps -aL 命令
ps -aL 的输出

更多例子

01) 检查哪些进程占用最多 RAM

下面的命令将使用进程显示多数存储器,%MEM 在第一列中, PID 在系统上的所有运行中的进程第三列第二列和命令:

$ ps -eo pmem,pid,cmd | sort -k 1 -nr

02) 显示特定进程id的所有线程

这将显示特定进程 pid 的所有线程。

$ ps -Lf -p 3482

03) 显示父进程的子进程

这将显示一个进程的所有子进程,并有助于找出从这个主进程中分叉出哪些进程。

$ ps -o pid,pcpu,pmem,uname,comm -C apache2

04) 显示进程运行了多长时间

以下命令将显示“mysql”进程在系统上运行的时间:

$ ps -e -o pid,comm,etime | grep mysql
3107 mysqld_safe 18-07:01:53
3469 mysqld 18-07:01:52
  • etime:进程开始后经过的时间,格式为 [[DD-]hh:]mm:ss。
  • etimes:自进程开始以来经过的时间,以秒为单位。

05) 获取安全信息

如果我们想查看谁当前登录到您的服务器,我们可以使用 ps 命令查看它:

$ ps -eo pid,user,args

现在您可以通过以下命令将 pid 映射到它们各自的 systemd 单元:

$ ps -e -o pid,unit,cmd

结论

pstree(或使用 ps -axjf )和 pgrep 是附加命令,可以帮助获取有关正在运行的进程的信息。

您可以使用 watch 命令将 ps 用作实时监视器,比如说,我们想按 CPU 过滤进程,并且内存使用情况报告每 1 秒更新一次。

$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

在本教程中,我们学习了在 Linux 中使用 ps 命令的多种方法。要探索所有选项,请参阅ps 手册页

如何从Windows和Linux Ping IP v6地址
linux stat命令详解