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 de démarrage.
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 ps
ou consultez la page d'Opengroup pour les autres formateurs.
La commande ps (au moins la version procps utilisée par de nombreuses distributions Linux) comporte un certain nombre de champs de format liés à l'heure de début du processus, notamment lstart
qui donne toujours la date et l'heure complètes de 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 façon dont les informations sont publiées dans le système de fichiers /proc, voirhttps://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running
(D'après mon expérience sous Linux, l'horodatage sur les répertoires /proc/ semble être lié à un moment où le répertoire virtuel a été récemment accédé 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 j'ai généré un nouveau shell bash, puis j'ai exécuté 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
Suite à la réponse d'Adam Matan, le /proc/<pid>
l'horodatage du répertoire 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.
C'est une unité un peu délicate à utiliser; voir aussi convertir les jiffies en secondes pour plus de détails.
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
END { printf "%9.0f\n", 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 autre).
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
Mise à jour avec quelques correctifs 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\n", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}
homme proc; rechercher heure de début .