Wie kann ich die Ausführungszeit eines Terminalprozesses messen?

160

Ich versuche, die Ausführungszeit eines Prozesses zu messen, den ich über die Befehlszeile aufrufe (dh ich möchte herausfinden, wie lange es dauert, bis der Prozess abgeschlossen ist). Gibt es einen Befehl, den ich zum Befehl hinzufügen kann, der den Prozess aufruft, der dies erreicht?

Drehmoment
quelle

Antworten:

197

Fügen Sie timevor dem Befehl hinzu, den Sie messen möchten. Zum Beispiel: time ls.

Die Ausgabe sieht folgendermaßen aus:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

Erläuterung zu real, userund sys(aus man time):

  • real: Verstrichene Realzeit (Wanduhr) in Sekunden, die vom Prozess verwendet wird.
  • user: Gesamtanzahl der CPU-Sekunden, die der Prozess direkt (im Benutzermodus) verwendet hat, in Sekunden.
  • sys: Gesamtanzahl der CPU-Sekunden, die das System im Namen des Prozesses (im Kernel-Modus) in Sekunden verwendet.
Ninjalj
quelle
1
@ninjalj, können Sie mehr Informationen liefern , was die real, userund sysZeiten sind , dass dieser Befehl?
Christopher Kyle Horton
2
@JacobVlijm Diese Antwort ist nicht so aufwendig. :) Du könntest deinen Kommentar bearbeiten und so machen.
muru
1
Beachten Sie, dass Sie möglicherweise benötigen, sudo apt-get install timewenn Sie eine Shell verwenden, bei der timees sich nicht um eine integrierte Shell handelt.
Poolie
1
Beachten Sie, dass dies die Ausgabe von Bash's timeBuiltin ist, es man timesich jedoch um eine ausführbare Datei (wie /usr/bin/timeaus dem timePaket) handeln würde und die Ausgabe anders aussehen würde. Auch in Bash können Sie help timefür Hilfe mit dem eingebauten ausführen.
wjandrea
Beachten Sie, dass das Prozessende nicht bedeutet, dass alle Arbeiten abgeschlossen sind. Eine Kopie kann zusätzliche Minuten dauern, nachdem die "Zeit" für das Spülen von Systempuffern zurückgekehrt ist (daher auch mit nicht zugewiesener Systemzeit).
Ubfan1
43

Probieren Sie für eine zeilenweise Delta-Messung gnomon aus .

Es ist ein Befehlszeilendienstprogramm, ähnlich wie moreutils 'ts, um der Standardausgabe eines anderen Befehls Zeitstempelinformationen voranzustellen. Nützlich für lang laufende Prozesse, bei denen Sie eine historische Aufzeichnung dessen wünschen, was so lange dauert.

Wenn Sie irgendetwas an gnomon weiterleiten, wird jeder Zeile ein Zeitstempel vorangestellt, der angibt, wie lange diese Zeile die letzte Zeile im Puffer war - das heißt, wie lange es gedauert hat, bis die nächste Zeile angezeigt wurde. Standardmäßig zeigt Gnomon die Sekunden an, die zwischen den einzelnen Zeilen vergangen sind, dies ist jedoch konfigurierbar.

gnomon demo

Janus Troelsen
quelle
2
Das ist ziemlich schlau.
Nathan Arthur
1
(Tippfehler im Link, zum Glück URL ok). Sie können es mit installieren, sudo npm i gnomon -gwenn Sie haben npm. Ich bin mir nicht sicher, wie gut es gegen "progress" -Zeilen mit "\ r" (in derselben Zeile bleiben) ist: In diesem Fall möchte ich, dass alles als eine lange Zeile gezählt wird, nicht als separate.
Tomasz Gandor
Also leiten wir es an Gnomon weiter! das ist es ?
Ciasto piekarz
26

Sie können verwenden time:

time ls -R
William Niu
quelle
8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

Wenn Sie diesen Befehl im Terminal ausführen, erhalten Sie die Gesamtzeit zum Kopieren einer Datei

user314473
quelle
Dies gibt Ihnen die Start- und Endzeit, nicht die Dauer.
wjandrea
Dies ist unter Umständen eine gute Antwort. Beispielsweise gibt der folgende findBefehl - ohne die 2>/dev/nullUmleitung - zahlreiche Permission denied Meldungen aus. Das Hinzufügen 2>/dev/nullzu diesem Befehl unterbricht jedoch den timeTeil dieses Befehls. Das Folgende ist ein guter Kompromiss: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"Geben Sie (z. B.) /usr/lib/libname-server-2.a find command took 3 sec als einzige Ausgabe an.
Victoria Stuart
Ein Nachtrag zu meinem Kommentar: Natürlich können Sie einfach ausführen time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(dh als sudo) - um diese zahlreichen Permission deniedWarnungen zu vermeiden .
Victoria Stuart
4

Gelegentlich benötige ich eine Stoppuhr, um zu zählen, wie lange eine Aktion wie das Booten meiner App dauert. In diesem Fall sind viele der hier beschriebenen Lösungen nicht hilfreich.

Dafür benutze ich gerne sw .

sw

Installieren

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

Verwendungszweck

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume
Cory Klein
quelle
0
time -v command

-v gibt weitere Informationen

Himanshu Mishra
quelle