Wie kann ich überprüfen, wie lange ein Prozess nach dessen Abschluss ausgeführt wurde?

13

Momentan benutze ich Folgendes, um zu überprüfen, wie lange ein Prozess tatsächlich läuft:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

Und das gibt Folgendes aus:

MY_ID PID_OF_PROCESS       00:16

Nach Abschluss des Vorgangs möchte ich jedoch herausfinden, wie lange er tatsächlich ausgeführt wurde, aber ich kann diese Informationen scheinbar nicht finden.

Diego
quelle

Antworten:

14

Ich glaube nicht, dass es möglich ist, solche Informationen zu erhalten, nachdem der Prozess bereits abgeschlossen ist.

Wenn Sie vorher wissen, dass Sie diese Informationen benötigen, können Sie den Befehl als ausführen

time <command>

z.B

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s
Petr Uzel
quelle
7

Überprüfen Sie, ob Ihre Unix-Variante die Prozessabrechnung unterstützt . Beispielsweise wird dies unter Ubuntu (und den meisten anderen Linux-Distributionen) durch das acctPaket Install acct http://bit.ly/software-small bereitgestellt . Wenn das Abrechnungssubsystem aktiv ist, lastcommwerden Informationen zu abgeschlossenen Prozessen angezeigt, einschließlich der verwendeten Prozessorzeit (die Uhrzeit der Wanduhr wird nicht aufgezeichnet).

Wenn Sie das Timing für ein bestimmtes Programm benötigen, rufen Sie es über auftime .

Wenn Sie genauere Informationen benötigen, verwenden Sie ein besseres Prüfpaket, z. B. das Prüfsubsystem unter Linux.

Gilles 'SO - hör auf böse zu sein'
quelle
Diese Antwort hat ihr Image verloren.
Mattdm
@mattdm Oh, es ist der Link, war auf Standard Stellen Sie Ubuntu für die Verknüpfung zu apt.ubuntu.com, und dann wurde das Bild von Imgur gelöscht. Ich muss es hunderte Male in SE verwendet haben und ich mag die Aussicht nicht, sie alle zu bearbeiten. Ich bin immer noch nicht sicher, ob SE einen automatisierten Ersatz vornimmt, was sie nicht tun werden, da sie dies nicht einmal getan haben, als die gesamte Java-Dokumentation verschoben wurde.
Gilles 'SO - hör auf böse zu sein'
1

Bevor ich diese Fragen und ihre Antworten gesehen habe, habe ich ein kleines Bash-Skript erstellt. Dies ist immer noch nützlich, wenn Sie keine Root-Rechte haben und acct nicht installiert ist oder Sie Ihren Befehl nicht direkt aufrufen (in meinem Fall: Ich verwende eine GUI, um Hintergrundprozesse einzurichten). Sie müssen die PID abrufen, bevor Sie ausgeführt werden (wer möchte sie dem Skript hinzufügen? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

Suchen Sie damit die PID von PROCESS_NAME

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

Eigentlich habe ich versucht, USER-ID und PID zu kombinieren, um das Skript nicht ambivalent zu machen, aber es ist nicht so einfach ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'scheint nicht immer zu funktionieren ...

PythoNic
quelle
Genau das, was ich brauchte! Auf Centos 6.8 musste ich die Anführungszeichen um '$ PID' weglassen und überspringen, egrep '$UID'da ich der einzige Benutzer bin, der dies mag:ps -eo uid,pid,etime | egrep $PID
Chris Adams,