2016-10-11 10 views
1

プロセスのCPU使用率(topコマンド)+このトップコマンドが情報を取得した日付をファイルごとに0.5秒ごとに出力したい日付+このCPU情報を持つライン) 私はシェルスクリプトで記述する場合、私はシェルスクリプト:topコマンドとdateコマンドを同時に実行する

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 

ような何かをするだろう。しかし、私は最初にあるため、CPUの情報を取得するには、トップで-n 1つのオプションを使用することはできません反復は"from system boot until now"なので、私は他の反復が必要です。

したがって、topコマンド+ナノ秒(date +%s。%N)の日付でプロセス情報を取得するためのコマンドの組み合わせを探しています(先頭のコマンドでも、ヘッダが、私はのような何かをしようとしています

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

)ミリ秒をしたいが、日付は最初の反復を印刷しています。

アイデア?

申し訳

私は疑問を持つ非常に正確ではないよ場合、私はこのスクリプトを使用して新しい午前ここに書いて...

+0

一回の実行中に 'top'を実行して内部的に繰り返しを実行すると、もちろん' date'の実行も1回だけです。 –

+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

関連する問題