GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere l'ora di inizio di un processo Linux di lunga durata?

Puoi specificare un formattatore e utilizzare lstart , come questo comando:

ps -eo pid,lstart,cmd

Il comando precedente produrrà tutti i processi, con i formattatori per ottenere PID, esecuzione del comando e data e ora di avvio.

Esempio (da riga di comando 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]                    
      ...

Puoi leggere ps o controlla la pagina di Opengroup per gli altri formattatori.


Il comando ps (almeno la versione procps utilizzata da molte distribuzioni Linux) ha un numero di campi di formato che si riferiscono all'ora di inizio del processo, incluso lstart che fornisce sempre la data e l'ora complete di inizio del processo:

# 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

Per una discussione su come le informazioni vengono pubblicate nel filesystem /proc, vederehttps://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running

(Nella mia esperienza con Linux, il timestamp sulle directory /proc/ sembra essere correlato a un momento in cui è stato recentemente effettuato l'accesso alla directory virtuale piuttosto che all'ora di inizio dei processi:

# 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

Nota che in questo caso ho eseguito un comando "ps -p 1" verso le 16:50, quindi ho generato una nuova shell bash, quindi ho eseguito il comando "ps -p 1 -p $$" all'interno di quella shell poco dopo ... .)


ls -ltrh /proc | grep YOUR-PID-HERE

Ad esempio, il PID del mio Google Chrome è 11583:

ls -l /proc | grep 11583
dr-xr-xr-x  7 adam       adam                     0 2011-04-20 16:34 11583

In seguito alla risposta di Adam Matan, il /proc/<pid> il timestamp della directory in quanto tale non è necessariamente direttamente utile, ma puoi usare

awk -v RS=')' 'END{print $20}' /proc/12345/stat

per ottenere l'ora di inizio in tick dall'avvio del sistema.

Questa è un'unità leggermente complicata da usare; vedi anche convertire jiffies in secondi per i dettagli.

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

Questo dovrebbe darti secondi, che puoi passare a strftime() per ottenere un timestamp (leggibile dall'uomo o altro).

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

Aggiornato con alcune correzioni da Stephane Chazelas nei commenti; grazie come sempre!

Se hai solo Mawk, forse prova

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 @{}

processo uomo; cerca ora di inizio .


Linux
  1. Trova il tempo di esecuzione di un comando o di un processo in Linux

  2. Linux:come ottenere l'ora dell'orologio da parete di un processo in esecuzione?

  3. Come faccio a far funzionare in background il mio server web Golang?

  4. come avviare il server Tomcat in Linux?

  5. Come posso ottenere l'ora dell'orologio da parete di un processo in esecuzione?

Come modificare la priorità di un processo in Linux

Come ottenere l'utilizzo della CPU di un singolo processo in Linux

Come ottenere il numero di processori/core in Linux

Come uccidere o terminare un processo Linux:la guida definitiva

Come trovare il PID e il PPID di un processo in Linux

Come inviare processi in background su Linux