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