【发布时间】:2016-10-11 15:48:36
【问题描述】:
我想在文件中打印一个进程的cpu使用百分比(top命令)+此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 $12 "\t" $9}' >> result.txt
sleep 0.5
done
但是我不能使用顶部的 -n 1 选项来获取 cpu 信息,因为第一次迭代是 "from system boot until now" 所以我需要其他迭代。
因此,我正在寻找一些命令组合,以使用 top 命令 + 纳秒日期 (date +%s.%N) 获取进程信息(top 命令也会在标题的第一行产生时间,但我想要毫秒)
我正在尝试类似的东西,
echo $(date +%s.%N) $(top -d 0.5 -n 100 -p myProcessPID | grep myProcessName) >> results.txt
但日期仅在第一次迭代时打印。
有什么想法吗?
对不起,如果我的问题不是很准确,我是这个脚本的新手,在这里写..
【问题讨论】:
-
如果你让
top内部执行迭代,在单次运行的过程中,那么当然date也只有一次运行。 -
除非您有特定原因,否则不要重新发明轮子 - 使用例如
dstat. -
作为 moreutils 一部分的时间戳输入
ts实用程序可以很好地解决这个问题。
标签: bash shell scripting centos7 top-command