Comment vérifier la durée d'un processus après sa fin?

13

Actuellement, j'utilise les éléments suivants pour vérifier la durée réelle d'un processus:

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

Et cela génère les éléments suivants:

MY_ID PID_OF_PROCESS       00:16

Cependant, une fois le processus terminé, je veux savoir combien de temps il a duré, mais je n'arrive pas à trouver cette information.

Diego
la source

Réponses:

14

Je ne pense pas qu'il soit possible d'obtenir de telles informations une fois le processus terminé.

Si vous savez à l'avance que vous aurez besoin de ces informations, vous pouvez exécuter la commande en tant que

time <command>

par exemple

~> time sleep 1

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

Vérifiez si votre variante Unix prend en charge la comptabilité des processus . Par exemple, sur Ubuntu (et la plupart des autres distributions Linux), cela est fourni par le acctpackage Install acct http://bit.ly/software-small . Si le sous-système de comptabilité est opérationnel, lastcommaffiche des informations sur les processus terminés, y compris le temps processeur utilisé (l'heure de l'horloge murale n'enregistre pas).

Si vous avez besoin de temps pour un programme spécifique, appelez-letime .

Si vous avez besoin d'informations plus précises, utilisez un package d'audit plus sophistiqué, par exemple le sous- système d'audit sous Linux.

Gilles 'SO- arrête d'être méchant'
la source
Cette réponse a perdu son image.
mattdm
@mattdm Oh, c'est le lien qui était standard sur Ask Ubuntu pour le lien apt.ubuntu.com, puis l'image a été supprimée de imgur. Je dois l'avoir utilisé des centaines de fois à travers SE et je n'aime pas la perspective de les éditer tous. J'attends toujours que SE fasse un remplacement automatisé, ce qu'ils ne feront pas car ils ne l'ont même pas fait lorsque toute la documentation Java a été déplacée.
Gilles 'SO- arrête d'être méchant'
1

Avant de voir ces questions et leurs réponses, j'ai fait un petit script bash. C'est toujours utile, si vous n'avez pas de droits root et acct n'est pas installé ou si vous n'appelez pas directement votre commande (dans mon cas: j'utilise un gui pour configurer les processus d'arrière-plan). Vous devez obtenir le PID avant de lancer (toute personne intéressée à l'ajouter dans le 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

Avec cela, trouvez le PID de PROCESS_NAME

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

En fait, j'ai essayé de combiner USER-ID et PID pour rendre le script non ambigu, mais ce n'est pas si simple ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'ne semble pas toujours fonctionner ...

PythoNic
la source
Juste ce dont j'avais besoin! J'ai trouvé que sur Centos 6.8, je devais omettre les guillemets autour de '$ PID' et sauter egrep '$UID'car je suis le seul utilisateur comme ça:ps -eo uid,pid,etime | egrep $PID
Chris Adams