¿Cómo verificar cuánto tiempo se ejecutó un proceso después de que terminó?

13

Actualmente estoy usando lo siguiente para verificar cuánto tiempo se está ejecutando un proceso:

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

Y eso genera lo siguiente:

MY_ID PID_OF_PROCESS       00:16

Sin embargo, después de que finaliza el proceso, quiero saber cuánto tiempo duró realmente, pero parece que no puedo encontrar esa información.

Diego
fuente

Respuestas:

14

No creo que sea posible obtener dicha información después de que el proceso ya haya finalizado.

Si sabe de antemano que necesitará esa información, puede ejecutar el comando como

time <command>

p.ej

~> time sleep 1

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

Compruebe si su variante de Unix admite la contabilidad de procesos . Por ejemplo, en Ubuntu (y la mayoría de las otras distribuciones de Linux), esto lo proporciona el acctpaquete Install acct http://bit.ly/software-small . Si el subsistema de contabilidad está en funcionamiento, lastcommmuestra información sobre los procesos terminados, incluida la cantidad de tiempo de procesador que utilizaron (el tiempo del reloj de pared no se registra).

Si necesita tiempo para un programa específico, invocalotime .

Si necesita información más precisa, utilice un paquete de auditoría más sofisticado, por ejemplo, el subsistema de auditoría en Linux.

Gilles 'SO- deja de ser malvado'
fuente
Esta respuesta ha perdido su imagen.
mattdm
@mattdm Oh, es el enlace que era estándar en Ask Ubuntu para vincular apt.ubuntu.com, y luego la imagen se eliminó de imgur. Debo haberlo usado cientos de veces en SE y no disfruto la posibilidad de editarlos todos. Todavía estoy esperando que SE haga un reemplazo automatizado, lo que no harán, ya que ni siquiera lo hicieron cuando se movió toda la documentación de Java.
Gilles 'SO- deja de ser malvado'
1

Antes de ver estas preguntas y sus respuestas, hice un pequeño script bash. Esto sigue siendo útil, si no tiene derechos de root y no está instalado acct o no invoca su comando directamente (en mi caso: uso una interfaz gráfica de usuario para configurar procesos en segundo plano). Necesita obtener el PID antes de ejecutarlo (¿alguien interesado en agregarlo al script? :)

#!/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

Con esto, encuentre el PID de PROCESS_NAME

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

En realidad, intenté combinar USER-ID y PID para que el script no fuera ambiguo, pero no es tan fácil ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'no parece funcionar siempre ...

PythoNic
fuente
¡Justo lo que necesitaba! He descubierto que en Centos 6.8 que necesitaba para omitir las comillas '$ PID' y saltar egrep '$UID'como soy el único usuario de este modo:ps -eo uid,pid,etime | egrep $PID
Chris Adams