GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir l'heure de début d'un processus Linux de longue durée ?

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 .


Linux
  1. Trouver le temps d'exécution d'une commande ou d'un processus sous Linux

  2. Linux - Comment définir l'affinité du processeur d'un processus sous Linux ?

  3. Comment obtenir le chemin d'un processus sous Unix / Linux

  4. Comment obtenir l'ID de processus pour tuer un processus nohup ?

  5. Comment trier la sortie ps par heure de début de processus ?

Comment changer la priorité d'un processus sous Linux

Comment obtenir l'utilisation du processeur d'un seul processus sous Linux

Comment obtenir le nombre de processeurs/cœurs sous Linux

Comment tuer ou terminer un processus Linux :Le guide ultime

Comment trouver le PID et le PPID d'un processus sous Linux

Comment envoyer des processus en arrière-plan sous Linux