2016-10-11 34 views
1

我想在文件中打印一个进程的CPU使用率(顶部命令)+该顶部命令获取信息的日期,每0.5秒(每个与日期+这款CPU信息)线 如果我在一个shell脚本写,我会做类似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",所以我需要其他迭代。

因此,我正在寻找一些命令组合来获取顶部命令+日期(纳秒)(日期+%s。%N)的进程信息(顶部命令还会在第一行头,但我希望毫秒)

我想是这样,

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

但日期只印在第一次迭代。

任何想法?

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

+0

如果您要求'top'在内部执行迭代,那么在单次运行过程中,当然也只有一次'date'运行。 –

+1

除非你有特定的原因,否则不要重新发明轮子 - 例如使用['dstat'](http://dag.wiee.rs/home-made/dstat/)。 –

+0

作为moreutils的一部分的时间戳输入'ts'工具对此很有效。 – Zlemini

回答

2

您可以通过awk管道top输出,并具有awk运行date实现这一目标。例如:

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

可以通过调整awk程序施加在所述输出的格式任意控制。还请注意,由于awk的内部模式匹配非常好,因此您不需要单独的grep

+0

这正是我想要的,谢谢!并感谢您的快速响应。 – aherrero