Shell 脚本:top 命令和 date 命令同时出现

Shell script: top command and date command at once

我想在文件中打印一个进程(top 命令)的 cpu 使用百分比 + 此 top 命令获取信息的日期,每 0.5 秒(每行带有日期+ 这个 cpu 信息) 如果我用 shell 脚本编写,我会做类似

的事情
while [ ! -f $STOP_FILE ]
do
echo "$(date +%s.%N)" >> $REPORT_FILE
top -b -n 1 -p myProcessPID | grep myProcessName | awk -F " " '{print  "\t" }' >> result.txt
sleep 0.5
done

但我不能使用顶部的 -n 1 选项来获取 cpu 信息,因为第一次迭代是 "from system boot until now" 所以我需要其他迭代。

因此,我正在寻找一些命令组合以使用 top 命令 + 纳秒级日期(日期 +%s.%N)获取进程信息(top 命令也在第一行中产生时间header,但我想要毫秒)

我正在尝试类似的东西,

echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt

但是日期只在第一次迭代时打印出来。

有什么想法吗?

抱歉,如果我对这个问题不是很准确,我是这个脚本的新手并写在这里..

您可以通过将 top 的输出管道化到 awk 并使 awk 运行 date 来实现此目的。例如:

top -d 0.5 -n 100 -p myProcessPID \
   | awk '/myProcessName/ { system("date +%s"); print [=10=] }'

您可以通过调整 awk 程序对输出格式进行任意控制。另请注意,您不需要单独的 grep,因为 awk 的内部模式匹配非常好。