2011-06-26 14 views
1

私はadbシェルコマンドを使用して私のルートの電話に接続し、 vmstatコマンドを実行して、さまざまなシステムリソースを監視します。 には、vmstatの出力をファイルにリダイレクトする方法があります。vmstatの出力をAndroid OSのファイルにリダイレクトする方法は?

..任意のアイデアを

vmstat > /sdcard/vmstat_output.txt 

を、それは動作しません...それはファイルが作成されますが、内部のデータがない:私が試しましたか?

答えて

1

問題を修正しました。私はhereからソースをダウンロードして、私は1つの余分な行を追加しました:

fflush(stdout); 

右print_lineコマンド(ライン:134)の後。

agcc vmstat.c -o vmstat 

及び/ SDカード/ ADB経由にファイルを置く:

adb push vmstat /sdcard/ 

今リダイレクトが後など、完璧 に動作し、私は agccとvmstat.cクロスコンパイルprint_line呼び出しごとに、データはファイルにフラッシュされます。マークPolhamusが述べたように、 問題が

...感謝のvmstatは、バッファ は、最初のデータで埋められていなければならないし、このデータをファイルにフラッシュされることを意味し、ブロックバッファリングコマンド、であるという事実でしたあなたは非常にマーク! :)

3

ファイルにリダイレクトされると、vmstatの出力はブロックバッファリングされると思います。だから、vmstatはファイルにフラッシュされる前にブロック分のデータを書き込まなければならず、ファイルが十分に書き込まれる前に割り込みすると、ファイルは空になります。あなたが十分に長く待っていれば、(私のために働いた)いくつかの成果を得るべきです。

"-n"フラグを数行書き込んだ後にvmstatを終了させて​​(データをフラッシュして)、その機能が壊れているように見えます。

/proc/vmstat、/ proc/stat、および/ proc/meminfoは、私が信じていると同じ情報を持っており、vmstatのようにうまくフォーマットされていません。

+0

ありがとうございました!これは理にかなっているようです。フラッシュの前にデータをブロックする必要がありますか?例えばvmstatのソースコードを変更してクロスコンパイルすることで、私が考えることのできるもう一つの方法は、stdoutが実行中のすべてのプロセスのファイルにリダイレクトされるようにすることです。 log.redirect-stdio、link [here](http://developer.android.com/guide/developing/tools/adb.html#stdout)を参照してください。 –

+0

破損したvmstat -nフラグのバグレポート[link](http://code.google.com/p/android/issues/detail?id=17996)に報告しました。 –

+0

独自のバージョンのvmstatをコンパイルする場合は、setbufまたはsetvbufを使用してstdoutのバッファリングを変更するか、各書き込みの後でfflushを呼び出すことができます。 –

1

私は通常、デバイスを選択するので、別のログに同時に複数の接続されたデバイスのログを記録することができますadb-sスイッチの助けを借りて

adb shell vmstat -r 0 -d 1 > ~/tmp/vmstat.log 

を経由して、私のローカルマシンに直接それをリダイレクトします。

関連する問題