在Linux上将grep排除在ps结果之外

在Linux上将grep排除在ps结果之外

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,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发行版和版本中可能有所不同。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Linux 基础