Come posso misurare il tempo di esecuzione di un processo terminale?


160

Sto cercando di misurare il tempo di esecuzione di un processo che chiamo tramite la riga di comando (ad esempio, voglio scoprire quanto tempo impiega il processo a terminare). C'è qualche comando che posso aggiungere al comando chiamando il processo che raggiungerà questo obiettivo?

Risposte:


198

Aggiungi timeprima del comando che vuoi misurare. Ad esempio: time ls.

L'output sarà simile a:

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

Spiegazione su real, usere sys(da man time):

  • real: Tempo reale trascorso (orologio da parete) utilizzato dal processo, in secondi.
  • user: Numero totale di secondi CPU utilizzati direttamente dal processo (in modalità utente), in secondi.
  • sys: Numero totale di secondi CPU utilizzati dal sistema per conto del processo (in modalità kernel), in secondi.

1
@ninjalj, si può fornire ulteriori informazioni su ciò che i real, usere sysgli orari sono che questo comando restituisce?
Christopher Kyle Horton,

2
@JacobVlijm Questa risposta non è così elaborata. :) Puoi modificare il tuo commento e renderlo così.
muru,

1
Si noti che potrebbe essere necessario sudo apt-get install timese si utilizza una shell in cui timenon è incorporato.
poolie,

1
Nota che questo è l'output del timebuiltin di Bash , ma man timeriguarderebbe un eseguibile (come /usr/bin/time, dal timepacchetto), e il suo output sarebbe diverso. Anche in Bash, puoi eseguire help timeaiuto per l'integrato.
wjandrea,

Si noti che la fine del processo non significa che tutto il lavoro è finito. Una copia potrebbe richiedere alcuni minuti dopo il "tempo" di ritorno per i buffers del sistema di svuotamento (quindi anche con tempo di sistema non allocato).
ubfan1,

43

Per una misurazione delta riga per riga, prova gnomon .

È un'utilità della riga di comando, un po 'come ts di moreutils, per anteporre le informazioni di data e ora all'output standard di un altro comando. Utile per i processi di lunga durata in cui desideri un record storico di ciò che richiede così tanto tempo.

Il piping di qualsiasi cosa su gnomon antepone un timestamp a ciascuna riga, indicando per quanto tempo quella riga era l'ultima riga nel buffer, ovvero quanto tempo impiegava la riga successiva ad apparire. Per impostazione predefinita, gnomon visualizzerà i secondi trascorsi tra ciascuna riga, ma è configurabile.

demo di gnomon


2
Questo è piuttosto elegante.
Nathan Arthur,

1
(errore di battitura nel link, fortunatamente URL ok). Puoi installarlo con sudo npm i gnomon -gse lo hai npm. Non sono sicuro di come funzioni contro le linee "progress" usando '\ r' (rimanendo sulla stessa linea): in quel caso mi piacerebbe che contasse tutto come una linea lunga, non separate.
Tomasz Gandor,

quindi lo convogliamo a gnomone! questo è tutto ?
Ciasto piekarz,


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

L'esecuzione di questo comando nel terminale ti darà il tempo totale per copiare un file


Questo ti darà l'ora di inizio e di fine, non la durata.
wjandrea,

Questa è una buona risposta, in alcune circostanze. Ad esempio, il seguente findcomando, senza 2>/dev/nullreindirizzamento, fornisce messaggi copiosi Permission denied . Tuttavia, l'aggiunta 2>/dev/nulla quel comando interrompe la timeparte di quel comando. Di seguito viene fornito un buon compromesso:, 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 (ad esempio) /usr/lib/libname-server-2.a find command took 3 sec come unico output.
Victoria Stuart,

Un addendum al mio commento: ovviamente, puoi semplicemente eseguire time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(cioè, come sudo) - evitando quei numerosi Permission deniedavvertimenti.
Victoria Stuart,

4

Di tanto in tanto mi ritrovo ad avere bisogno di un cronometro per contare quanto tempo impiega un'azione come l'avvio della mia app, nel qual caso molte delle soluzioni qui non sono utili.

Per questo mi piace usare sw .

sw

Installare

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.