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 .