在linux中使用top -c命令来过滤基于进程名称列出的进程
top -c
最上面列出了所有的进程,有很好的select,通过使用选项-u筛选进程的用户名,但我想知道是否有任何简单的方法来过滤基于顶部输出的COMMAND列下列出的进程名的进程。
例如,我想要像top -some选项-substring的processname和top显示pids只有这个子string的命令名
使用pgrep来获得匹配命令行的pid:
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
顶部-p
期望逗号分隔的pid列表,所以我们在pgrep中使用-d','
。 pgrep中的-f
标志使其与命令行相匹配,而不是程序名称。
它可以交互地完成
在运行top -c
,敲入o并在列上写一个filter,例如显示COMMAND列包含stringfoo的行,写入COMMAND=foo
如果你只是想要一些基本的输出这可能就足够了:
top -bc |grep name_of_process
您可以在运行时将filter添加到top
,只需按下o键,然后键入filterexpression式即可。 例如,要监视所有的java进程,使用filterexpression式COMMAND=java
。 您可以通过再次按下键来添加多个filter,您可以通过用户使用u键进行过滤,并且可以使用=键清除所有filter。
@ perreal的命令很棒! 如果你忘了,试试两个步骤…
例如:filter顶部只显示名为yakuake的应用程序:
$ pgrep yakuake 1755 $ top -p 1755
有用的顶部交互式命令'c':切换完整path与命令名'k':由PID'F'杀死:按…过滤…用箭头select…然后按's'设置sorting
下面的答案也是好的…我今天正在寻找,但找不到它。 谢谢
在StackOverflow上寻找这么多的答案后,我没有看到一个适合我的需求的答案。
也就是说,要使用给定的关键字来保持最新的命令,并且当新的进程产生时我们不必一次又一次地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;)
修改__关键字,它应该工作。 (Ubuntu 2.6.38testing)
2.14.2015补充说:上面的代码中缺less系统工作负载部分。 对于那些关心“平均负载”的人来说:
__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;)
那这个呢?
top -c -p <PID>
我结束了使用下面的代码的shell脚本:
#!/bin/bash while [ 1 == 1 ] do clear ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto sleep 5 done