Encontrar el tiempo de ejecución del comando en retrospectiva

22

Acabo de ejecutar un proceso de larga ejecución desde el indicador bash. En retrospectiva, desearía timehaberlo corrido , o haber anotado el momento en que lo inicié.

¿Hay alguna forma de obtener esta información de forma retrospectiva? El .bash_historyno parece incluir marcas de tiempo.

En mi caso particular, es Mac OS X, pero estoy interesado en las soluciones generales de Unix / Linux.

Para aclarar, el proceso ya se ha completado, ¡y prefiero no volver a ejecutarlo a menos que sea absolutamente necesario!

Graham Borland
fuente
También siempre olvidé esto, y configuré mi mensaje para mostrar la hora.
matemáticas el

Respuestas:

23

bash en realidad recuerda los tiempos hasta que cierra el caparazón.

Así que intenta correr

HISTTIMEFORMAT='%x %X ' history

Si también pones

HISTTIMEFORMAT=<some format>

en su ~/.bashrc, también se escribirá ~/.bash_historyen la salida, para que pueda verificar lo que sucedió en las sesiones de shell anteriores también.

Mikel
fuente
Impresionante Mike, ni siquiera creía que esto fuera posible.
Tim
9

La respuesta de Mikel es buena, excepto que si ejecuta el programa y se va por un tiempo, no puede estar seguro de cuándo finalizó el proceso. Entonces, incluso si tiene el tiempo cuando comenzó el programa, no sabe cuánto tiempo le llevó.

No tengo una solución para el caso cuando necesitas averiguarlo sin preparación. Sin embargo, si va a hacer eso nuevamente, puede hacer lo mismo que yo: imprima la hora actual junto con el indicador de comandos de shell. De esa manera, si todavía tiene el terminal abierto, puede ver la hora en que inició el programa y la hora en que se imprime el siguiente mensaje. Un poco de matemática te dará el tiempo de ejecución.

Para hacer esto bash, pon esto en tu .bashrc:

export PS1="\A \u@\h \W \$ "

En zsh, pon esto en tu .zshrc:

export PS1="%D{%H:%M} %n@%m %1~ %# "

Lo anterior le dará a su shell un formato de <time> <username>@<hostname> <current dir> <$ or % or #>. Para diferentes conchas y locos de lujo instrucciones, lea la página del manual de su concha.

Nota: esto probablemente no ayudará si necesita una alta precisión o si el programa produce tanta salida que no puede ver el mensaje anterior.

phunehehe
fuente
2
Incluyo una marca de tiempo en mi indicador de shell por este motivo, pero tenga en cuenta que el tiempo que se muestra en el indicador es cuando se imprimió, que puede ser bastante diferente del momento en que terminó de escribir y presione Intro para iniciar el comando. En otras palabras, recuerde tener en cuenta el "tiempo de inactividad rápido".
jw013
5

Si el proceso aún se está ejecutando, puede usarlo pspara obtener el tiempo de inicio y cuánto tiempo de CPU ha utilizado.

Por ejemplo, para todos los procesos:

ps -eo cputime,start,pid,command,args

Para un pid particular (12345):

ps -p 12345 -o cputime,start,pid,command,args
jsbillings
fuente
Gracias, pero el proceso ya se ha completado. Lo tendré en cuenta si lo vuelvo a ejecutar.
Graham Borland
Estoy usando GNU psen Linux, psen MacOSX podría ser BSD y no estoy seguro de los argumentos.
jsbillings
Además, tenga en cuenta que el tiempo de la CPU no es "en tiempo real"
Juan
4

lastcomm (si la contabilidad de procesos BSD está habilitada) le dará la duración de la ejecución (en un sentido limitado que puede o no ser adecuado).

Martin Keegan
fuente