Pour savoir quand un processus a commencé, ma première supposition a été de vérifier l'heure à laquelle il a /proc/<pid>/cmdline
été écrit / modifié la dernière fois.
ps
affiche également un START
champ. Je pensais que ces deux sources seraient les mêmes. Parfois, ce ne sont pas les mêmes. Comment cela pourrait-il être?
Réponses:
Sous Linux au moins, vous pouvez également faire:
d'avoir une heure de début plus utile.
Notez cependant que c'est l'heure à laquelle le processus a été démarré, pas nécessairement l'heure à laquelle la commande qu'il exécute actuellement a été invoquée. Les processus peuvent (et exécutent généralement) plusieurs commandes au cours de leur vie. Et les commandes engendrent parfois d'autres processus.
Les temps des fichiers dans
/proc
Linux (au moins) sont généralement la date à laquelle ces fichiers ont été instanciés, ce qui serait la première fois que quelque chose tentait d'y accéder ou de répertorier le contenu du répertoire.Par exemple:
L'expansion a
/proc/$$/xx*
provoqué la lecture du contenu du shell,/proc/$$
ce qui a provoqué l'cmdline
instanciation du fichier.Voir aussi: Horodatage du socket dans / proc // fd
la source
proc est un système de fichiers virtuel, donc je ne compterais sur aucune information sur l'état des fichiers.
L'heure de début du processus se trouve dans la colonne / proc / PID / stat 22 . Il est donné en quelques secondes après le démarrage du système. Pour le convertir en secondes, vous devez le diviser par
sysconf(_SC_CLK_TCK)
100 pour la plupart des systèmes (mais pas tous!).Pour obtenir l'heure de démarrage du système, vous déterminez la disponibilité actuelle en secondes, qui est la première valeur de / proc / uptime .
Ayant ces deux nombres, vous soustrayez le premier du second et vous obtenez le nombre de secondes écoulées depuis le démarrage du programme.
Exemple (pour pidgin ):
Remarque: cet exemple simple ne fonctionne pas si
pidof
renvoie des PID multipe.la source