【发布时间】:2016-10-29 19:12:07
【问题描述】:
我需要编写一个执行以下操作的 Bash 脚本:
- 在“top”命令中,我想通过给定的命令过滤进程。下面我以 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) 给我时间。
所以我只是努力将这些部分放在一起并解决上面提到的过滤问题。感谢您的帮助!
【问题讨论】: