如何在顶部查看特定过程


47

top上是否有相对灵活的选项来跟踪特定过程?
理想情况下是通过人类可读的值来识别过程?例如chromejava

换句话说,我想查看顶部提供的所有典型信息,但要将结果过滤到提供的参数即。'chrome'或'java'


1
你有尝试过top | grep chrome吗?
潘迪2014年

1
您还可以使用ps -x | chrome获取pid(让pid显示2034),然后top | grep 2034
Pandya

top | grep chrome工作得很好-谢谢!
2014年

@Pandya-同样,我正在寻找的进程只运行了几秒钟(在集成测试中为node.js)-这意味着当我过去ps -x | process_name获取PID时,当我再次运行该进程时,PID是不同的,因此原始的PID无法识别它。
Michael Coleman

Answers:


24

您可以简单地使用grep

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

运行以下命令以获取所需的输出(ex-chrome):

top | grep chrome

在这里,我们使用的是grep与管道|,以便topgrep平行; top提供给grep(作为输入)的输出,并grep chrome过滤匹配的行,chrome直到top停止。


1
谢谢,我知道其他人也有他们的喜好,但是我喜欢这个答案,因为它易于理解,因此将来也很容易记住!-我会投票赞成,但我没有足够的声誉...
Michael Coleman

2
仅当该过程位于顶部显示的输出中时,此方法才有效。我认为@Ramesh的答案应该是公认的答案
jb

@JamieBullock问题top只处理和OP要基于过滤过程top
潘迪

@Pandya实际上,我撤回了以前的评论,因为它是基于我的代码中的错误。我仍然认为@Ramesh的答案更好(并且也基于顶部过滤过程)。我可以轻松地破坏你的生活,例如sleep 10 & top | grep sleep
jb

我更喜欢unix.stackexchange.com/a/165343/48973,因为它显示标题。
瑞安

39

从我在这里的其他答案中,您可以执行以下操作:

top -p `pgrep "java"`

4
top -p `pgrep "java"`在bash shell中给我以下错误top: -p requires argumenttop -ppgrep -d ',' "apache2"确实为我工作了,但是我真的不明白命令在做什么-是将多个参数输入top的方式吗?
Michael Coleman 2014年

@Ramesh,您需要将pid列表逗号分开才能使用。
坎南·莫汉

3
这是正确的答案。
j03m

1
+1这是正确的答案。“ top | grep Chrome”相当野蛮,因为它从顶部抓取了所有不匹配“ Chrome”的输出,从而丢失了诸如标题和列标签之类的东西。在pgrep的输出中使用subshel​​l是unix原理的正确应用。
John M Naglick

2
@loretoparisi,可能是因为您使用的选择器匹配多个进程。有关适用于一个或多个匹配进程的命令,请参见此答案
迈克尔·海斯

21
top -p `pgrep -d "," java`

说明:

  1. top -p pid1,pid2:显示多个过程信息,pid应该用 ,
  2. pgrep -d "," java:打印所有Java程序的pid,默认情况下pid用换行符分隔。根据顶部的需要使用-d ","分隔,

如果看到类似的错误top: -p argument missing,则表明没有Java程序正在运行,即pgrep没有输出。


1
该解决方案比仅使用top -p pgrep“ java”`` 更好。谢谢。
loretoparisi

1
通过检查pgrep出口代码来防止错误:pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

在OpenBSD中top,只需按g并输入要过滤的命令名称。

top例如Ubuntu上,按o并输入例如COMMAND=chrome,仅显示COMMAND等于的列中的条目chrome

在使用与topUbuntu 相同的实现的Linux上,阅读手册中“ 窗口”部分的“ top过滤”。


7

还提供了其他好的答案,但是前段时间我编写了一个脚本,命名为ptop,非常适合我:

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

这支持指定多个进程名称(如ptop bash chrome),并在没有/正在运行任何指定名称的进程的情况下提供更好的错误消息。


3

如果要停留在top上下文中并保持所有其他进程可见,可以按L搜索您的进程:

Locate string chrome

这将突出显示chrome名称中带有的任何过程,并将其显示出来。使用&去下一场比赛。

您可以按c在显示进程名称和完整命令之间切换。


这^因为RTFM的人!man top | less +/5d
cprn

0

您也可以在顶部使用过滤器来隔离特定进程。按“ O”调出过滤器提示。然后键入格式为FIELD = value的过滤器。例如,要过滤所有tmux进程,请使用:

COMMAND=tmux

使用“ =”重置过滤器。请参见首页上标题为“过滤”的部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.