Como obter apenas o uso máximo de memória com/usr/bin/time?

Como obter apenas o uso máximo de memória com/usr/bin/time?

Estou construindo um script com usr/bin/timeprograma para monitorar o uso de RAM de um script e armazená-lo em uma variável para verificar se é maior que um limite especificado $mlimit, como este exemplo usando ls /como comando:

$mlimit=512000 #512mb limit in kilobytes

$musage=$(/usr/bin/time -f "%M" ls / | rev | cut -f 1 | rev)
echo "RAM usage: $musage"

/usr/bin/timeneste caso, retorna primeiro a saída do comando e depois o tamanho máximo do conjunto residente (uso de RAM). Pensei que poderia reverter a saída, cortá-la para obter o uso da memória RAM e revertê-la. Mas eu recebo esta saída: RAM usage: bin. biné o primeiro diretório retornado pelo ls /comando. Portanto, minha estratégia para obter o uso de RAM não está funcionando.

Obrigado

Responder1

GNU timegera as informações de uso de recursos no stderr, embora possa ser instruído a escrevê-las em outro lugar com-o

{
  musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1

Registraria o uso máximo de memória na variável, deixando ls'stdout e stderr sozinhos.

Isso funciona duplicando o fd 1 original (stdout) para fd 3 fora da substituição do comando with 3>&1, para que dentro da substituição do comando, possamos restaurar o stdout original para lswith >&3depois de disponibilizar o canal de substituição do comando no fd 4.

Em seguida, timegrava sua saída nesse canal via /dev/fd/4, enquanto lsstdout é o original.

informação relacionada