2016-10-11 106 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