Linux ps命令示例

时间:2020-03-05 15:28:37  来源:igfitidea点击:

ps是Unix/Linux操作系统中使用的内置命令,用于列出当前正在运行的进程。
它显示了一个静态快照,其中包含有关进程的信息,而top,htop和glances显示了重复的更新。

ps命令带有许多操作输出的选项。
它从/proc虚拟文件系统中提取进程的所有信息。

本教程将重点介绍使用ps命令的方式以及一些实际示例

ps命令的语法

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

$ps [options]

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

  • UNIX选项-前划线
  • BSD选项-必须使用破折号
  • GNU长选项-前面有两个破折号

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

$ps

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

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

不带任何选项运行ps命令只是命令的最简单格式,它返回的信息不多。
为了充分利用ps命令的功能,让我们使用其他选项运行它,以下部分将对其进行详细说明。

01)显示所有进程(UNIX格式)

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

$ps -A

或者:

$ps -e

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

$ps -r

02)显示所有进程(BSD格式)

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

$ps ax

或者

$ps aux

其中:

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

03)显示命令运行的所有进程

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

$ps -C <command_name>

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

$ps -C kerneloops

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

$ps -C sshd,systemd

04)显示用户正在运行的所有进程

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

$ps -u 1000

我们也可以按用户名搜索过程:

$ps -U root -u root u

-U参数将通过真实用户ID(RUID)选择。
它选择真实用户名或者ID在用户列表中的进程。
真实的用户ID标识创建进程的用户。

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

05)显示组拥有的流程

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

$ps -fG cas

为了按组ID显示所有进程,可以使用带有-g选项的命令。
例如:

$ps -g 1

输出:

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

06)通过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

07)按TTY显示流程

为了按TTY显示所有进程,我们可以使用'-t'选项运行命令。
例如:

$ps -t tty1

08)显示当前用户拥有的进程

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

$ps -x

09)显示所有具有完整格式列表的进程

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

$ps -af

10)以另外的格式显示所有进程

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

$ps -F

11)以ASCII层次结构格式显示所有进程

为了说明这一点,假设我们要以ASCII美术流程层次结构格式显示Linux系统上的所有流程,让我们运行:

$ps af

12)显示过程扩大输出

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

$ps w

让我们比较运行“ ps w”和“ ps”的输出:

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

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

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

14)显示带有线程ID的线程

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

$ps -aT

15)显示有关线程的信息

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

$ps -aL

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

一些更多的例子

01)检查哪些进程占用最多的内存

对于系统上所有正在运行的进程,以下命令将显示使用进程的大多数内存:第一列中的“%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