从 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 发行版和版本而异。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP