次のコマンドをテストしましたが、動作しません。なぜ「トップ| grep> file 'not work?
$> top -b -d 1 | grep java > top.log
標準誤差は使用していません。標準出力を使用していることを確認しましたが、top.logは常に空です。どうしてこれなの?
次のコマンドをテストしましたが、動作しません。なぜ「トップ| grep> file 'not work?
$> top -b -d 1 | grep java > top.log
標準誤差は使用していません。標準出力を使用していることを確認しましたが、top.logは常に空です。どうしてこれなの?
デフォルトでは、grep
の出力はバッファを出力します。これは、grep
の出力が(システムによって異なる場合がある)出力を超えるまで、top.log
に何も書き込まれないことを意味します。
grep
に出力時にラインバッファリングを使用するように指示します。試してください:
top -b -d 1 | grep --line-buffered java > top.log
素晴らしい!それはうまくいく。 ありがとうございます。 – JaycePark
'top'が終了したときに' grep'してその出力をフラッシュするべきではありませんか? '-d 1'を使うとすぐに起こるはずです。 – user2357112
@ user2357112終了する場合のみ! – devnull
私の組み込みマシンでは、grepは-line-bufferedオプションを持っていませんでした。だから、私は自分のために、この回避策を使用:
while :;do top -b -n 1 | grep java >> top.log;done &
このちなみに私は「Javaの」のようなプログラムのためにバックグラウンドで実行中のモニターを持っていると、ファイルtop.logですべての結果を保つことができます。
私は完全にはわかりませんが、topは「インタラクティブ」だと思いますが、標準的な標準出力ストリームはありません。 grepはおそらく入力を得ていません。 – squiguy
Javaは実際に実行されており、表示するには十分なリソースがありますか? – user2357112
[man page](http://www.unixtop.org/man.shtml)によると、あなたが 'top'に渡すオプションは冗長に見えます。 – user2357112