¿Cómo puedo medir el tiempo de ejecución de un proceso terminal?

160

Estoy tratando de medir el tiempo de ejecución de un proceso que llamo a través de la línea de comando (es decir, quiero saber cuánto tiempo tarda el proceso en finalizar). ¿Hay algún comando que pueda agregar al comando que llame al proceso que logrará esto?

htorque
fuente

Respuestas:

198

Agregue timeantes del comando que desea medir. Por ejemplo: time ls.

La salida se verá así:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

Explicación sobre real, usery sys(de man time):

  • real: Tiempo real transcurrido (reloj de pared) utilizado por el proceso, en segundos.
  • user: Número total de segundos de CPU que el proceso usó directamente (en modo de usuario), en segundos.
  • sys: Número total de segundos de CPU utilizados por el sistema en nombre del proceso (en modo kernel), en segundos.
ninjalj
fuente
1
@ninjalj, se puede proporcionar más información sobre lo que los real, usery syslos horarios son que este comando devuelve?
Christopher Kyle Horton
2
@JacobVlijm Esta respuesta no es tan elaborada. :) Podrías editar tu comentario y hacerlo así.
muru
1
Tenga en cuenta que es posible que necesite sudo apt-get install timesi está utilizando un shell donde timeno está integrado.
Poolie
1
Tenga en cuenta que esta es la salida de Bash's timeincorporado, pero man timesería sobre un ejecutable (como /usr/bin/time, desde el timepaquete), y su salida sería diferente. También en Bash, puede help timesolicitar ayuda con la construcción.
wjandrea
Tenga en cuenta que el final del proceso no significa que todo el trabajo esté terminado. Una copia puede tomar minutos adicionales después de que el "tiempo" regrese para limpiar los buffers del sistema (por lo tanto, también con tiempo de sistema no asignado).
ubfan1
43

Para una medición delta línea por línea, pruebe gnomon .

Es una utilidad de línea de comandos, un poco como ts de moreutils, para anteponer información de marca de tiempo a la salida estándar de otro comando. Útil para procesos de larga duración en los que desea un registro histórico de lo que lleva tanto tiempo.

Colocar cualquier cosa en gnomon antepondrá una marca de tiempo a cada línea, indicando cuánto tiempo fue esa última línea en el búfer, es decir, cuánto tiempo tardó en aparecer la siguiente. Por defecto, gnomon mostrará los segundos transcurridos entre cada línea, pero eso es configurable.

demo de gnomon

Janus Troelsen
fuente
2
Esto es bastante hábil.
Nathan Arthur
1
(error tipográfico en el enlace, afortunadamente URL bien). Puede instalarlo con sudo npm i gnomon -gsi tiene npm. No estoy seguro de qué tan bien funciona contra las líneas de "progreso" usando '\ r' (permaneciendo en la misma línea): en ese caso me gustaría contarlo todo como una línea larga, no separadas.
Tomasz Gandor
¡así que lo canalizamos a gnomon! Eso es ?
Ciasto piekarz
26

Puedes usar time:

time ls -R
William Niu
fuente
8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

Ejecutar este comando en la terminal le dará el tiempo total para hacer frente a un archivo

usuario314473
fuente
Esto le dará la hora de inicio y la hora de finalización, no la duración.
wjandrea
Esta es una buena respuesta, en algunas circunstancias. Por ejemplo, el siguiente findcomando, sin el 2>/dev/nullredireccionamiento, proporciona mensajes abundantes Permission denied . Sin embargo, agregar 2>/dev/nulla ese comando rompe la timeparte de ese comando. Lo siguiente proporciona un buen compromiso: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"dando (por ejemplo) /usr/lib/libname-server-2.a find command took 3 sec como la única salida.
Victoria Stuart
Una adición a mi comentario: por supuesto, simplemente puede ejecutar time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(es decir, como sudo), evitando esas numerosas Permission deniedadvertencias.
Victoria Stuart
4

Ocasionalmente me encuentro necesitando un cronómetro para contar cuánto tiempo lleva una acción como el arranque de mi aplicación, en cuyo caso muchas de las soluciones aquí no son útiles.

Para esto me gusta usar sw .

SO

Instalar en pc

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

Uso

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume
Cory Klein
fuente
0
time -v command

-v da más información

Himanshu Mishra
fuente