Est-il possible d'obtenir l'heure de début d'un ancien processus en cours d'exécution? Il semble que ps
indique la date (et non l'heure) si elle n'a pas été commencée aujourd'hui, et uniquement l'année si elle n'a pas été commencée cette année. La précision est-elle perdue à jamais pour les anciens processus?
Vous pouvez spécifier un formateur et utiliser lstart
, comme cette commande:
ps -eo pid,lstart,cmd
La commande ci-dessus affichera tous les processus, avec des formateurs pour obtenir le PID, l'exécution de la commande et la date et l'heure démarrées.
Exemple (à partir de la ligne de commande Debian/Jessie)
$ ps -eo pid,lstart,cmd
PID CMD STARTED
1 Tue Jun 7 01:29:38 2016 /sbin/init
2 Tue Jun 7 01:29:38 2016 [kthreadd]
3 Tue Jun 7 01:29:38 2016 [ksoftirqd/0]
5 Tue Jun 7 01:29:38 2016 [kworker/0:0H]
7 Tue Jun 7 01:29:38 2016 [rcu_sched]
8 Tue Jun 7 01:29:38 2016 [rcu_bh]
9 Tue Jun 7 01:29:38 2016 [migration/0]
10 Tue Jun 7 01:29:38 2016 [kdevtmpfs]
11 Tue Jun 7 01:29:38 2016 [netns]
277 Tue Jun 7 01:29:38 2016 [writeback]
279 Tue Jun 7 01:29:38 2016 [crypto]
...
Vous pouvez lire la page de manuel de ps
ou consultez la page d'Opengroup pour les autres formateurs.
La commande ps (au moins la version de procps utilisée par de nombreuses distributions Linux) contient un certain nombre de champs de format liés à l'heure de début du processus, notamment lstart
, qui indique toujours la date et l'heure complètes du démarrage du processus:
# ps -p 1 -wo pid,lstart,cmd
PID STARTED CMD
1 Mon Dec 23 00:31:43 2013 /sbin/init
# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED CMD
root 1 0.0 0.1 2800 1152 ? Ss Mon Dec 23 00:31:44 2013 /sbin/init
root 5151 0.3 0.1 4732 1980 pts/2 S Sat Mar 8 16:50:47 2014 bash
Pour une discussion sur la manière dont les informations sont publiées dans le système de fichiers/proc, voir https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has- été en cours d'exécution
(D'après mon expérience sous Linux, l'horodatage sur les répertoires/proc/semble être lié à un moment d'accès récent au répertoire virtuel plutôt qu'à l'heure de début des processus:
# date; ls -ld /proc/1 /proc/$$
Sat Mar 8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151
Notez que dans ce cas, j'ai exécuté une commande "ps -p 1" vers 16h50, puis créé un nouveau shell bash, puis la commande "ps -p 1 -p $$" dans ce shell peu de temps après ... .)
ls -ltrh /proc | grep YOUR-PID-HERE
Par exemple, le PID de mon Google Chrome est 11583:
ls -l /proc | grep 11583
dr-xr-xr-x 7 adam adam 0 2011-04-20 16:34 11583
Pour faire suite à réponse d'Adam Matan , l'horodatage du répertoire /proc/<pid>
en tant que tel n'est pas nécessairement directement utile, mais vous pouvez utiliser
awk -v RS=')' 'END{print $20}' /proc/12345/stat
pour obtenir l'heure de début en ticks d'horloge depuis le démarrage du système.1
Ceci est une unité légèrement délicate à utiliser; voir aussi convertir jiffies en secondes pour plus de détails.
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
END { print now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat
Cela devrait vous donner des secondes, que vous pouvez passer à strftime()
pour obtenir un horodatage (lisible par l'homme ou autrement).
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/12345/stat
Mis à jour avec des corrections de Stéphane Chazelas dans les commentaires; merci comme toujours!
Si vous n’avez que Mawk, essayez peut-être
awk -v ticks="$(getconf CLK_TCK)" -v Epoch="$(date +%s)" '
NR==1 { now=$1; next }
END { printf "%9.0f", Epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}
1 man proc ; recherchez heure de début .
ps -eo pid,etime,cmd|sort -n -k2
ps -eo pid,cmd,lstart | grep YOUR-PID-HERE