15个Linux ps 命令例子
文章目录
PS是一个内置的的Unix/Linux操作系统来列出当前运行的进程使用的命令。它显示包含进程信息的静态快照,而 top、htop 和 Glances 显示重复更新。PS 命令带有许多操作输出的选项。它从 /proc 虚拟文件系统中提取进程的所有信息。
本教程将重点解释使用 ps 命令的方法以及一些实际示例
ps命令的语法
ps命令使用的基本语法如下:
$ ps [options]
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 -r
ps -r 的输出
显示所有进程(BSD格式)
为了使用 BSD 格式的 ps 命令查看 Linux 系统上的所有进程,您可以运行以下命令:
$ ps ax
或者
$ ps aux
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 sshd,systemd
显示用户运行的所有进程
如果要按用户 ID 1000 的用户列出进程,请运行以下命令:
$ ps -u 1000
您还可以按用户名搜索进程:
$ ps -U root -u root u
该 -U parameter
会选择由 real user ID (RUID)
。它选择真实用户名或 ID 在用户列表列表中的进程。真实用户 ID 标识创建流程的用户。
而 -u paramater
将通过有效用户 ID (EUID) 进行选择
显示组拥有的进程
为了列出特定组名拥有的所有进程,让我们运行带有-fG
选项的命令。例如:
$ ps -fG cas
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 的输出
显示当前用户拥有的进程
要列出当前用户正在运行的所有进程,让我们运行带有“-x”选项的命令:
$ ps -x
ps -x 的输出
以完整格式列表显示所有进程
例如,让我们运行带有-f
选项的 ps 命令,以完整格式显示所有进程:
$ ps -af
ps -af 的输出
以额外的格式显示所有进程
此外,要查看结果的额外完整格式列表,请运行带有-F
选项的ps 命令。例如:
$ ps -F
ps-F 的输出
以ASCII层级格式显示所有进程
为了说明,假设您想以 ASCII art 进程层次结构格式显示 Linux 系统上的所有进程,让我们运行:
$ ps af
输出将采用“森林”格式:
ps af 的输出
加宽输出中的显示过程
如果要在运行 ps 命令时扩大输出,请使用w
选项:
$ ps w
让我们比较一下运行 ‘ps w’ 和 ‘ps’ 的输出:
输出 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 的输出
显示线程信息
此外,您可以使用“-L”选项来获取有关 Linux 系统中线程的信息:
$ ps -aL
带有“LWP”列的输出显示线程 ID:
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 手册页。