Ich habe eine Hash-Prüfung einer großen Datei gestartet und möchte sie nicht mit neu starten time
. Wie kann ich die Zeit der Wanduhr ermitteln, ohne die Zeit am Anfang oder date
kurz vor dem Aufrufen eines Befehls zu verwenden?
Für einen laufenden Prozess können Sie dies tun:
PID=5462
command ps -p "$PID" -o etime
command ps -p "$PID" --no-headers -o etime
Als allgemeine Funktion können Sie Ihre Shell-Eingabeaufforderung ändern. Dies ist meine Definition der Bash-Eingabeaufforderung:
TERM_RED_START=$'\033[1m\033[31m'
TERM_RED_END=$'\033(B\033[m'
PS1='\nec:$(ec=$?; if [ 0 -eq $ec ];
then printf %-3d $ec;
else echo -n "$TERM_RED_START"; printf %-3d $ec; echo "$TERM_RED_END";
fi) \t \u@\h:\w\nstart cmd:> '
PS2="cont. cmd:> "
Der für Sie relevante Teil ist der \t
für die Zeit.
Dies löst jedoch nicht alle Probleme. Die neue Eingabeaufforderung zeigt an, wann der Vorgang beendet wurde, aber die vorherige Eingabeaufforderung war möglicherweise ziemlich alt, als der zu messende Befehl gestartet wurde. Entweder müssen Sie die Eingabeaufforderung erneuern, bevor Sie Befehle mit langer Laufzeit starten, oder Sie müssen sich die aktuelle Uhrzeit merken, wenn Sie wissen möchten, wie lange der aktuelle Vorgang gedauert hat.
Für eine vollständige Lösung benötigen Sie eine Überwachungsfunktion (die die Start- und Endzeit von Prozessen protokolliert). Dies kann jedoch zu einer großen Datenmenge führen, wenn sie nicht auf die Shell beschränkt werden kann.
Aufbauend auf der akzeptierte Antwort, können Sie auch kontinuierlich die verstrichene Zeit eines laufenden Prozesses überwachen mit watch
:
PID=5462
watch command ps -p "$PID" -o etime