次のコマンドを使用する例のように、usr/bin/time
スクリプトのRAM使用量を監視し、指定された制限を超えていることを確認するために変数に保存するプログラムを使用してスクリプトを作成しています。$mlimit
ls /
$mlimit=512000 #512mb limit in kilobytes
$musage=$(/usr/bin/time -f "%M" ls / | rev | cut -f 1 | rev)
echo "RAM usage: $musage"
/usr/bin/time
この場合、コマンドの出力が最初に返され、次に最大常駐セットサイズ(RAM使用量)が返されます。その後、出力を反転して切り取ってメモリ使用量を取得し、再び反転することができるようです。しかし、私は次のような結果を得ました:RAM usage: bin
。bin
はコマンドによって返される最初のディレクトリですls /
。だから私はRAMの使用量を確保するための私の戦略は効果がありません。
ありがとう
答え1
GNUはtime
stderrにリソース使用量情報を印刷しますが、他の場所に書き込むように指示できます。-o
{
musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1
ls
変数の最大メモリ使用量は、「stdout」と「stderr」を維持しながら記録されます。
これは、コマンド置換の外部から元のfd 1(stdout)がfd 3にコピーされ、コマンド置換の内部で3>&1
fd 4で使用できるようになった後、コマンド置換パイプを使用してls
元のstdoutを復元できることです。>&3
その後、time
出力をそのパイプに書き込むと、/dev/fd/4
stdoutls
が生の出力になります。