在 Linux 上从 ps 命令结果中排除 grep

linuxopen sourceoperating system更新于 2026/1/25 9:22:17

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 − 以树状结构显示所有进程,显示父子关系以及进程的线程。

示例

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

$ 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)来过滤输出。您还可以使用带有 -v 选项和 -w 选项的 grep 从输出中排除特定进程,以及使用带有正则表达式的 awk 来匹配字符串的否定。请记住,ps 命令的输出格式和选项可能因 Linux 发行版和版本而异。


相关文章


有用资源