Wie erhalte ich mit /usr/bin/time nur die maximale Speichernutzung?

Wie erhalte ich mit /usr/bin/time nur die maximale Speichernutzung?

Ich erstelle ein Skript mit usr/bin/timeeinem Programm zur Überwachung der RAM-Nutzung eines Skripts und speichere es in einer Variablen, sodass ich überprüfen kann, ob es über einem angegebenen Grenzwert liegt $mlimit, wie in diesem Beispiel mit ls /dem folgenden Befehl:

$mlimit=512000 #512mb limit in kilobytes

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

/usr/bin/timein diesem Fall gibt zuerst die Ausgabe des Befehls und dann die maximale Größe des Resident Sets (RAM-Nutzung) zurück. Ich dachte, ich könnte dann die Ausgabe umkehren, sie kürzen, um die RAM-Nutzung zu erhalten, und sie dann wieder umkehren. Aber ich erhalte diese Ausgabe: RAM usage: bin. binist das erste Verzeichnis, das vom ls /Befehl zurückgegeben wird. Meine Strategie, die RAM-Nutzung zu erhalten, funktioniert also nicht.

Danke

Antwort1

GNU timegibt die Informationen zur Ressourcennutzung auf stderr aus, kann aber angewiesen werden, sie woanders auszugeben mit-o

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

Würde die maximale Speichernutzung in der Variablen aufzeichnen und dabei ls„stdout“ und „stderr“ unverändert lassen.

Dies funktioniert, indem außerhalb der Befehlsersetzung mit das ursprüngliche fd 1 (stdout) auf fd 3 dupliziert wird 3>&1, sodass wir innerhalb der Befehlsersetzung das ursprüngliche stdout für lsmit wiederherstellen können >&3, nachdem wir die Befehlsersetzungs-Pipe auf fd 4 verfügbar gemacht haben.

Schreibt dann timeseine Ausgabe über in diese Pipe /dev/fd/4, während lsstdout das Original ist.

verwandte Informationen