Für einen laufenden Prozess können Sie Folgendes tun:
PID=5462
command ps -p "$PID" -o etime
command ps -p "$PID" --no-headers -o etime
Als allgemeine Funktion können Sie Ihren Shell-Prompt ändern. Dies ist meine Bash-Eingabeaufforderungsdefinition:
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 \[email protected]\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 wird angezeigt, wenn der Prozess beendet ist, aber die frühere Eingabeaufforderung kann ziemlich alt gewesen sein, als der zu messende Befehl gestartet wurde. Also denken Sie entweder daran, die Eingabeaufforderung zu erneuern, bevor Sie lange laufende Befehle starten, oder Sie müssen sich die aktuelle Zeit merken, wenn Sie wissen möchten, wie lange der aktuelle Prozess gedauert hat.
Für eine vollständige Lösung benötigen Sie eine Audit-Funktion (die die Start- und Endzeit von Prozessen protokolliert). Aber das kann eine riesige Datenmenge verursachen, wenn es nicht auf die Shell beschränkt werden kann.
Aufbauend auf der akzeptierten Antwort können Sie mit watch
auch kontinuierlich die verstrichene Zeit eines laufenden Prozesses überwachen :
PID=5462
watch command ps -p "$PID" -o etime