Comment puis-je mesurer le temps d'exécution d'un processus terminal?

160

J'essaie de mesurer le temps d'exécution d'un processus que j'appelle via la ligne de commande (par exemple, je veux savoir combien de temps il faut pour que le processus se termine). Existe-t-il une commande que je puisse ajouter à la commande appelant le processus qui y parviendra?

htorque
la source

Réponses:

198

Ajoutez timeavant la commande que vous voulez mesurer. Par exemple: time ls.

La sortie ressemblera à:

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

Explication sur real, useret sys(de man time):

  • real: Temps réel écoulé (horloge murale) utilisé par le processus, en secondes.
  • user: Nombre total de secondes-CPU utilisées directement par le processus (en mode utilisateur), en secondes.
  • sys: Nombre total de secondes-CPU utilisées par le système pour le compte du processus (en mode noyau), en secondes.
Ninjalj
la source
1
@ninjalj, pouvez - vous fournir plus d' informations sur ce que les real, useret les systemps sont que cette commande retourne?
Christopher Kyle Horton
2
@JacobVlijm Cette réponse n'est pas si élaborée. :) Vous pouvez éditer dans votre commentaire et le rendre ainsi.
Muru
1
Notez que vous pouvez avoir besoin sudo apt-get install timesi vous utilisez un shell où timen’est pas intégré.
poolie
1
Notez qu'il s'agit de la sortie de la fonction timeintégrée de Bash , mais qu'il man times'agirait d'un exécutable ( /usr/bin/timedu timepaquet, par exemple) et que sa sortie serait différente. Également dans Bash, vous pouvez help timedemander de l'aide pour la commande intégrée.
Wjandrea
Notez que la fin du processus ne signifie pas que tout le travail est terminé. Une copie peut prendre quelques minutes supplémentaires après le retour de "l'heure" pour vider les mémoires tampon du système (donc avec l'heure système non allouée également).
ubfan1
43

Pour une mesure delta ligne par ligne, essayez gnomon .

C'est un utilitaire de ligne de commande, un peu comme ts de moreutils, pour ajouter des informations d'horodatage à la sortie standard d'une autre commande. Utile pour les processus de longue durée pour lesquels vous souhaitez un historique de ce qui prend si longtemps.

Piping quoi que ce soit à gnomon ajoutera un horodatage à chaque ligne, indiquant combien de temps cette ligne était la dernière ligne du tampon - c'est-à-dire combien de temps il a fallu à la ligne suivante pour s'afficher. Par défaut, gnomon affichera les secondes écoulées entre chaque ligne, mais cela est configurable.

gnomon démo

Janus Troelsen
la source
2
C'est assez lisse.
Nathan Arthur
1
(faute de frappe dans le lien, heureusement URL ok). Vous pouvez l'installer avec sudo npm i gnomon -gsi vous en avez npm. Je ne sais pas à quel point cela se passe contre les lignes "progress" en utilisant '\ r' (en restant sur la même ligne): dans ce cas, j'aimerais que tout soit compté comme une longue ligne, pas des lignes séparées.
Tomasz Gandor
alors nous le conduisons à gnomon! c'est ça ?
Ciasto piekarz
26

Vous pouvez utiliser time:

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

L'exécution de cette commande dans le terminal vous donnera le temps total nécessaire à la copie d'un fichier.

utilisateur314473
la source
Cela vous donnera l'heure de début et l'heure de fin, pas la durée.
Wjandrea
C'est une bonne réponse, dans certaines circonstances. Par exemple, la findcommande suivante - sans la 2>/dev/nullredirection - donne des Permission denied messages copieux . Cependant, ajouter 2>/dev/nullà cette commande casse la timepartie de cette commande. Ce qui suit offre un bon compromis: 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"donner (par exemple) /usr/lib/libname-server-2.a find command took 3 sec comme seul résultat.
Victoria Stuart
Un addendum à mon commentaire: bien sûr, vous pouvez simplement exécuter time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(c'est-à-dire en tant que sudo) - en évitant ces nombreux Permission deniedavertissements.
Victoria Stuart
4

Parfois, j'ai besoin d'un chronomètre pour compter le temps nécessaire à une action telle que le démarrage de mon application, auquel cas bon nombre des solutions présentées ici ne sont pas utiles.

Pour cela, j'aime utiliser sw .

sw

Installer

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

Usage

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
la source
0
time -v command

-v donne plus d'informations

Himanshu Mishra
la source