在 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 − 以树状结构显示所有进程,显示父子关系以及进程的线程。
示例
以下是使用 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 发行版和版本而异。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

