/usr/bin/time でメモリのピーク使用量のみを取得するにはどうすればよいですか?

/usr/bin/time でメモリのピーク使用量のみを取得するにはどうすればよいですか?

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 使用量を取得し、それを元に戻すことができると考えました。しかし、次の出力が返されます: 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

lsstdout と stderr をそのままにして、最大メモリ使用量を変数に記録します。

これは、コマンド置換の外側で の元の fd 1 (stdout) を fd 3 に複製することで機能します。これにより、コマンド置換の内部では、コマンド置換パイプを fd 4 で使用できるようにした後、3>&1の元の stdout を復元できます。ls>&3

次に、timeを介してそのパイプに出力を書き込みます/dev/fd/4。stdoutlsは元の出力です。

関連情報