linux中的top -c命令用于过滤基于processname列出的进程

130 unix linux process top-command

top -c
Run Code Online (Sandbox Code Playgroud)

Top列出了所有进程,有很好的选项可以通过使用选项-u按用户名过滤进程,但我想知道是否有任何简单的方法来根据顶部输出的COMMAND列下列出的进程名过滤进程.

例如,我想要top -some选项-substring of processname和top显示pids只在其命令名中包含此子字符串

per*_*eal 192

使用pgrep获取匹配命令行的pid:

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
Run Code Online (Sandbox Code Playgroud)

top -p期望以逗号分隔的pid列表,因此我们-d','在pgrep中使用.-fpgrep中的标志使其与命令行匹配而不是程序名称.

  • 请记住,如果为'string_to_match_in_cmd_line'生成新进程,它们将不会显示在顶部; 你必须退出顶部并重新运行此命令 (11认同)
  • 真棒.像魅力一样工作.非常感谢 (6认同)
  • 我遇到了`top:pid limit(20)超过了`所以我使用了这个:`top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr"\\n"","| sed's /,$ //')`. (4认同)

nos*_*nos 103

它可以以交互方式完成

运行后top -c,o在列上点击并写入一个过滤器,例如显示COMMAND列包含字符串foo的行,写入COMMAND=foo

如果您只想要一些基本输出,这可能就足够了:

top -bc |grep name_of_process
Run Code Online (Sandbox Code Playgroud)

  • 这给了我'无效选项或语法:-bc' (4认同)
  • `top -bc -n 1 ` 更方便,因为它将迭代次数限制为 1。 (4认同)
  • 这应该是公认的答案。它更准确,仅适用于 'top' 命令提供的选项。它确实显示了新的流程。 (2认同)

Don*_*kby 78

您可以在top运行时添加过滤器,只需o按键,然后键入过滤器表达式.例如,要监视所有java进程,请使用筛选表达式COMMAND=java.您可以再次按键添加多个过滤器,您可以使用u键过滤用户,并可以使用=键清除所有过滤器.

  • 这是一个比接受的答案更好的解决方案(此解决方案比原始解决方案晚了3年).与原始解决方案不同,此解决方案实际上也适用于新生成的流程.如果您正在监视按需创建的Apache进程,这非常重要. (2认同)
  • 确实是一个更好的解决方案,因为它可以实时过滤。接受的解决方案在运行top之前先解析进程ID。结果过程就像固定了top -c -p 920,1345,1346一样。 (2认同)
  • 在top的某些(较旧)版本中不存在使用`o`作为过滤器的情况:`top:procps version 3.2.8`存在用户过滤器,因此可以使用。 (2认同)

BBW*_*ows 13

@perreal的命令很棒!如果你忘了,试试两步......

示例:过滤顶部仅显示名为yakuake的应用程序:

$ pgrep yakuake
1755

$ top -p 1755
Run Code Online (Sandbox Code Playgroud)

有用的顶级交互式命令'c':切换完整路径与命令名'k':按PID'F'杀死:过滤...用箭头选择...然后按's'设置排序

下面的答案也很好......我今天正在寻找,但找不到它.谢谢


Val*_*Val 7

在StackOverflow上寻找这么多答案之后,我还没有看到满足我需求的答案.

也就是说,使用top命令继续使用给定的关键字进行刷新,并且当新进程生成时,我们不必一次又一次地使用CTRL + C/top.

因此,我做了一个......

这是无需重启的版本.

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)
Run Code Online (Sandbox Code Playgroud)

修改__keyword它应该有效.(Ubuntu 2.6.38测试)

2.14.2015补充:上面的代码缺少系统工作负载部分.对于关心"平均负载"部分的人:

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
Run Code Online (Sandbox Code Playgroud)


ser*_*inc 5

在 中htop,您可以简单地搜索

/process-name
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,htop 并不总是可用,您可能没有添加它的权限。 (3认同)