/usr/bin/timeで最大メモリ使用量を取得する方法は?

/usr/bin/timeで最大メモリ使用量を取得する方法は?

次のコマンドを使用する例のように、usr/bin/timeスクリプトのRAM使用量を監視し、指定された制限を超えていることを確認するために変数に保存するプログラムを使用してスクリプトを作成しています。$mlimitls /

$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: binbinはコマンドによって返される最初のディレクトリですls /。だから私はRAMの使用量を確保するための私の戦略は効果がありません。

ありがとう

答え1

GNUはtimestderrにリソース使用量情報を印刷しますが、他の場所に書き込むように指示できます。-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>&1fd 4で使用できるようになった後、コマンド置換パイプを使用してls元のstdoutを復元できることです。>&3

その後、time出力をそのパイプに書き込むと、/dev/fd/4stdoutlsが生の出力になります。

関連情報