从 Linux 的 ps 结果中排除 grep


Linux 中的 ps 命令用于显示系统上正在运行的进程的信息。它提供了一个当前进程的快照,包括进程 ID (PID)、拥有该进程的用户、CPU 和内存使用率百分比以及启动该进程的命令。默认情况下,ps 仅显示与 ps 命令相同终端会话中运行的进程的信息。但是,使用各种选项和命令行参数,您可以自定义输出以显示系统上所有正在运行的进程的信息,甚至远程显示。

列出所有进程

要使用 ps 命令列出 Linux 或类 Unix 系统上所有正在运行的进程,您可以使用以下命令选项和参数之一 -

  • ps aux - 此命令显示系统上所有正在运行的进程,包括其他用户拥有的进程。a 选项显示所有用户进程,u 选项显示有关运行进程的用户详细信息,x 选项显示没有控制终端的进程。

  • ps -e 或 ps -ef - 此命令显示系统上的所有进程,包括没有控制终端的进程。e 选项显示所有进程,f 选项显示完整格式列表,包括进程的父子关系。

  • ps -A - 此命令显示所有正在运行的进程,包括那些没有控制终端的进程。

  • ps -eLf - 它以树状格式显示所有进程,显示父子关系以及进程的线程。

示例

以下是在 Linux 系统上使用 ps aux 命令列出所有正在运行的进程的示例 -

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  21644  4100 ?        Ss   Jan11   0:08 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Jan11   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Jan11   0:00  [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    Jan11   0:00  [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S    Jan11   0:00  [kworker/0:0H]
...

此命令输出显示每个进程的以下信息 -

  • USER - 拥有该进程的用户

  • PID - 进程 ID

  • %CPU - CPU 使用率百分比

  • %MEM - 内存使用率百分比

  • VSZ - 虚拟内存大小

  • RSS - 常驻集大小

  • TTY - 与进程关联的终端

  • STAT - 进程状态

  • START - 进程启动时间

  • TIME - 进程消耗的总 CPU 时间

  • COMMAND - 启动该进程的命令

查找特定进程

您可以将 ps 命令与其他命令(如 grep 或 awk)结合使用以搜索特定进程。以下是如何使用 ps 命令搜索特定进程并仅显示相关信息的示例 -

$ ps aux | grep ssh
root      1027  0.0  0.1  47320  3304 ?        Ss   Jan11   0:00 /usr/sbin/sshd -D

此命令使用 ps aux 命令列出所有正在运行的进程,并将输出通过管道传输到 grep ssh,该命令过滤输出以仅显示包含字符串“ssh”的行。在此示例中,输出显示 ssh 守护进程正在运行,并且 pid 为 1027

另一种查找特定进程的方法是 -

$ ps -ef | grep ssh
root     1027     1  0 Jan11 ?        00:00:00 /usr/sbin/sshd -D

此命令使用 ps -ef 命令列出所有正在运行的进程,并将输出通过管道传输到 grep ssh,该命令过滤输出以仅显示包含字符串“ssh”的行。在此示例中,输出显示 ssh 守护进程正在运行,pid 为 1027,父 pid 为 1,以及其他详细信息。

您还可以使用 pgrep 命令查找要查找的进程的 pid,方法是运行

$ pgrep -fl ssh
1027 /usr/sbin/sshd -D

pgrep 带有一个 -f 选项,该选项与整个命令行匹配。以及 -l 选项以显示命令的名称

排除 grep

如果要列出所有进程并过滤掉包含特定字符串的进程,则可以使用 ps 命令与 grep -v 一起排除要过滤掉的字符串。

例如,要从输出中排除所有包含字符串“grep”的进程 -

$ ps aux | grep -v grep

此命令将显示除命令行中包含字符串 grep 的进程之外的所有进程。

以下是另一种仅使用 ps 命令的方法 -

$ ps aux --not-heading | awk '!/grep/ { print $0 }'

此命令将显示除命令行中包含字符串 grep 的进程之外的所有进程,使用 --not-heading 选项将排除标题,并且 awk 与 ! 和 /grep/ 模式匹配不包含字符串“grep”的行并打印它们。

您可以将 grep 替换为您想要从输出中排除的任何字符串。

创建排除 grep 本身的 grep 表达式

如果要使用 grep 命令过滤掉包含特定字符串的进程,但也要从输出中排除 grep 命令本身,则可以使用 -v 选项反转匹配以及 -w 选项仅匹配整个单词 -

$ ps aux | grep -w -v grep

此命令使用 ps aux 列出所有正在运行的进程,并将输出通过管道传输到 grep -w -v grep,该命令过滤输出以排除任何包含精确字符串“grep”的行,并且仅匹配整个单词。

另一种实现此目的的方法是使用 awk 命令

$ ps aux | awk '$11 !~ /grep$/ {print}'

此命令使用 ps aux 列出所有正在运行的进程,并将输出通过管道传输到 awk 命令,该命令过滤输出以排除命令字段末尾包含精确字符串“grep”的任何行。$11 是命令字段的字段号,!~ 是正则表达式匹配否定。

结论

总之,ps 命令是用于列出和监视 Linux 或类 Unix 系统上运行的进程的有用工具。您可以使用 ps 命令的各种命令选项和参数来显示有关所有正在运行的进程的信息,或过滤输出以仅显示特定进程。此外,您可以使用其他命令(如 grep、awk、pgrep)来过滤输出。您还可以使用 grep 以及 -v 选项和 -w 选项从输出中排除特定进程,以及使用正则表达式的 awk 来匹配字符串的否定。请记住,ps 命令的输出格式和选项可能因不同的 Linux 发行版和版本而异。

更新于: 2023年1月24日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.