0

私は次のことをしようとしています:

の出力を取得free -moし、2 行目を取得して 30 秒ごとにファイルに記録します。

私が走るとき

$free -mo -s 30 

実行され、30 秒ごとに出力が表示されます。

しかし、私が走るとき

$ free -mo -s 30 | head -2 | tail -1

1 回だけ実行されます。何が悪いのかわかりません。

free マニュアルには free -s 30 とあり、30 秒ごとにコマンドを実行します。

4

5 に答える 5

6

head -2出力の最初の 2 行のみを返し、終了します。tail -1最後の行を返し、終了します。プログラムがパイプラインで終了すると、パイプライン全体が強制終了されるため、いつ終了するかfreeで停止しheadますtail

于 2012-12-31T15:06:08.910 に答える
0

あなたの答えに感謝します。プロセスのメモリ使用率を監視しようとしていました。わかったと思います。

START_TIME=$(date);
cd /data;

INPUT_DATA=$1;
CODE_FILE=$2;
TIMES=$3;

echo "$START_TIME" > "$CODE_FILE.freeMemory_$TIMES.log";
free -mo -s 30 >> "$CODE_FILE.freeMemory_$TIMES.log" &
freepid=$!;

sleep 1m;
#echo "PID generated for free command -- $freepid";
START_TIME=$(date);
i=0;
while [ $i -le $TIMES ]
    do
            sh runCode.sh $CODE_FILE "output.csv" $INPUT_DATA;
            i=`expr $i + 1`
    done

END_TIME=$(date);
echo "process started at $START_TIME and ended at $END_TIME " ;
sleep 1m;
kill -9 $freepid;
END_TIME=$(date);
echo "$END_TIME" >> "$CODE_FILE.freeMemory_$TIMES.log";
于 2013-01-01T07:17:00.803 に答える
0

試す

free -mos 30 | grep 'Mem:' >yourlog.txt

(しかし、この種のデータをキャプチャするために sar のようなものを検討する方がよいかもしれません - それは他の多くのものを報告することもできます - データからレポートを生成するまでフィルタリング/抽出を延期するだけです)。

于 2012-12-31T15:18:02.520 に答える
0

使用するfree -mo -s 30 &> test.txt &

これにより、コマンドからのすべての出力が取得され、freetest.txt に出力され、バックグラウンドで実行されます。

于 2012-12-31T15:08:34.350 に答える
0

ウィル・ハートゥングは正しい。代わりにこれを行います:

真の間; フリーモを行います | 頭 -2 | テール -1; 30 睡眠; 終わり

于 2012-12-31T15:28:32.280 に答える