top -c
Top命令可以列出所有进程,使用选项-u可以按用户名过滤进程,但我想知道是否有一种简单的方法可以基于在top命令输出的COMMAND列下列出的进程名来过滤进程。
例如,我希望使用top -某些选项 -进程名子字符串,并且top仅显示命令名称中包含此子字符串的进程ID。
top -c
Top命令可以列出所有进程,使用选项-u可以按用户名过滤进程,但我想知道是否有一种简单的方法可以基于在top命令输出的COMMAND列下列出的进程名来过滤进程。
例如,我希望使用top -某些选项 -进程名子字符串,并且top仅显示命令名称中包含此子字符串的进程ID。
使用pgrep获取匹配命令行的PID:
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
top命令的-p
选项期望输入一个由逗号分隔的进程ID列表,因此我们在pgrep中使用-d','
。pgrep中的-f
标志使其匹配命令行而不是程序名称。
可以交互地完成。
运行top -c
后,按下o键并在列上编写筛选器,例如,要显示命令列包含字符串foo的行,请编写COMMAND=foo
如果您只想要一些基本输出,那么这可能已经足够了:
top -bc |grep name_of_process
top -bc -n 1
更方便,因为它将迭代次数限制为1。 - galathtop -c
命令,然后按下 o 键并在列上编写过滤器。 - MrR在top
运行时,您可以添加过滤器。只需按下o键,然后输入过滤器表达式。
例如,要监视所有包含字符串“java”的进程,请使用过滤器表达式COMMAND=java
。
您可以再次按下o键添加多个过滤器。
您可以使用u按用户进行筛选。使用=清除所有过滤器。
top -c -p 920,1345,1346
一样固定。 - Jérôme Gillardo
作为过滤器是不存在的:top: procps version 3.2.8
。用户过滤器存在,因此可以使用。 - ManweCPU>0.0
的过滤器? - Dan@perreal的命令很好用!如果你忘记了,请分两步来尝试...
例如:筛选顶部以仅显示名为yakuake的应用程序:
$ pgrep yakuake
1755
$ top -p 1755
有用的顶部互动命令 'c':切换全路径与命令名称 'k':通过PID结束进程 'F':按...筛选,使用箭头选择,然后按's'设置排序
下面的回答也很好......我今天正在寻找它,但找不到。谢谢
在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;)
修改 __keyword 即可正常工作。(已在Ubuntu 2.6.38上测试)
2015年2月14日更新: 以上代码缺少系统工作负载部分。 对于关心“平均负载”的人:
__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;)
htop
中,你可以直接使用搜索功能:/process-name
#!/bin/bash
while [ 1 == 1 ]
do
clear
ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
sleep 5
done
top -p
选项的限制。
对于那些不支持使用o
选项进行过滤的旧版top的用户,这里提供了一个可编写脚本的示例,以获取全屏/控制台输出(此输出缺少摘要信息)。__keyword="YOUR_FILTER" ; ( FILL=""; for i in $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ; while :; do HSIZE=$(( $(stty size|cut -f1 -d" ") - 1 )); (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )
__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once
对于使用Mac的人,top命令不支持其他答案中展示的过滤方式(并且pgrep参数略有不同)......该函数将启动符合第一个参数模式(根据pgrep)的进程的top,并传递任何其他传递给top的参数。
function topnamed() {
name=$1
shift
top -pid $(pgrep -d ' -pid ' -fi "$name") $@
}
topnamed python
带有顶部额外参数的示例:
topnamed python -o mem
top -pid $(pgrep -d ' -pid ' -fi "$name") $@
工作正常。 - Vlad这个怎么样?
top -c -p <PID>
top: pid limit (20) exceeded
的提示,所以我使用了这个命令:top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr "\\n" "," | sed 's/,$//')
。该命令可以列出匹配命令行中特定字符串的进程信息,展示它们的资源占用状况,同时限制最多显示20个进程。 - f01top -pid $(pgrep -d " -pid " -f -i string_to_match_in_cmd_line)
- Vlad