微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 使用top命令捕获由COMMAND过滤的进程的%CPU和PID

我需要编写一个执行以下操作的Bash脚本:

>在“top”命令中,我想通过给定的COMMAND过滤进程.在下文中,我使用Google Chrome作为示例,在COMMAND列中显示为“chrome”.
>过滤后,可以有零个,一个或多个进程,其中包含COMMAND“chrome”(这只是为了突出显示通常没有一个具有COMMAND“chrome”的进程).
>现在我想将当前时间(hh:mm:ss),进程的PID和为此进程显示的%cpu值写入文件“logfile”
>每秒重复步骤1到3.

示例:假设有三个“chrome”进程,“logfile”中的输出应如下所示(前三秒):

    17:49:12 7954 14.0
    17:49:12 7969  9.3
    17:49:12 2626  1.3
    17:49:13 7954 12.0
    17:49:13 7969  6.3
    17:49:13 2626  1.2
    17:49:14 7954 14.7
    17:49:14 7969  8.5
    17:49:14 2626  2.1

到目前为止我的想法:使用命令

    top -b -n 1 -p 7954 | tail -n 2 | head -n 2 | awk '{print $1, $9}' >> logfile

我通过PID过滤顶部(在这种情况下PID == 7954),输出看起来像

    PID %cpu
    7954 6.6

然而(因为我实际上想要通过COMMAND文件管理器)我不知道如何通过COMMAND过滤.在上面的行中,“-p 7954”对PID == 7954进行过滤,但是我需要在此处写什么来过滤COMMAND == chrome?另外,如何删除/避免标题

根据时间步骤:我发现了命令

    date +"%T" 

给我时间格式正确(hh:mm:ss).

所以我只是努力将这些部分放在一起并修复上面提到的过滤问题.感谢您的任何帮助!

解决方法:

Awk可以做到这一点; awk’/ regex / {print}’仅在匹配正则表达式的行上执行打印操作.

但是,你也可以(也许也应该)包含头部和尾部:

top -b -n 1 | awk 'NR>1 && $10 == "chrome" {print strftime("%T"), $1, $9}' 

…假设顶部输出的第十个字段包含命令名称.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐