![Como obter apenas o uso máximo de memória com/usr/bin/time?](https://rvso.com/image/192252/Como%20obter%20apenas%20o%20uso%20m%C3%A1ximo%20de%20mem%C3%B3ria%20com%2Fusr%2Fbin%2Ftime%3F.png)
Estou construindo um script com usr/bin/time
programa 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/time
neste 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 time
gera 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 ls
with >&3
depois de disponibilizar o canal de substituição do comando no fd 4.
Em seguida, time
grava sua saída nesse canal via /dev/fd/4
, enquanto ls
stdout é o original.