通过命令行选项添加过滤器命令

时间:2019-03-19 19:16:16

标签: linux bash filter

我正在尝试在顶部添加过滤器命令以用于非交互使用。使用top时,可以交互指定过滤器,例如

$ top
Type: o
Enter: COMMAND=MyProcess

将仅显示命令中带有“ MyProcss”的进程。

此外,top的显示设置可以通过命令行“ $”保存到$ HOME / .toprc文件中。然后,当top重新启动时,它将使用这些显示设置代替默认设置。

但是似乎通过“ COMMAND = ...”添加的过滤器没有保存在.toprc文件中。那么是否可以通过命令行添加这些过滤器,以便top可以非交互地输出数据?我无法使用top的“ -p”选项显示来自特定PID的数据,因为我需要跟踪20多个PID,并且可以在调用top之后添加它们。另外,我不想输出计算机上正在运行的所有900多个进程的数据。

最后,我真的不想只grep进程名称,因为我也想要top的标头。

所以理想情况下,伪命令应该是这样,但这不起作用:

top -b -o 'COMMAND=MyProcess' -o '!COMMAND=NotThisProcess'

2 个答案:

答案 0 :(得分:1)

根据我的top手册页,-o仅用于排序。我看不到用于指定“其他”过滤器的命令行选项。并且-b选项会阻止读取用户输入以键入过滤器。

假设您的top像我的,那么标题共有7行。因此,如果您只想查看“ MyProcess”进程,则可以执行以下操作:

top -b -n 1 | sed '8,$ {/MyProcess/! d}'

含义是,从第8行到末尾删除包含MyProcess的任何行。

答案 1 :(得分:0)

您使用的是哪个最高版本(top -v)?这很重要,因为某些版本指出“活动的“其他过滤器””已保存在“个人”配置文件中,而其他版本则没有。例如,比较the top man page on man7.orgthe one on manpages.ubuntu.com

对我来说,top -v返回procps-ng 3.3.12

看着the procps-ng repository,我发现有an issue为此添加了支持。该问题已解决,并且支持将其他过滤器保存到配置文件was added中,并且可以在v3.3.16

中找到该问题。

因此对于我的环境,将top升级到3.3.16将为我提供所需的配置功能。显然,您的环境可能有所不同。

话虽如此,我还没有找到任何将其作为命令参数传递的方法。但是只要使用一些shell脚本和sed操作即可对配置文件进行处理。