Můžete zadat formátovač a použít lstart
, jako tento příkaz:
ps -eo pid,lstart,cmd
Výše uvedený příkaz vypíše všechny procesy s formátovači pro získání PID, spuštění příkazu a data+času.
Příklad (z příkazového řádku 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]
...
Můžete si přečíst ps
's manpage nebo se podívejte na stránku Opengroup pro ostatní formátovače.
Příkaz ps (alespoň verze procps používaná mnoha distribucemi Linuxu) má řadu polí formátu, která se týkají času zahájení procesu, včetně lstart
který vždy uvádí celé datum a čas zahájení procesu:
# 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
Diskusi o tom, jak jsou informace publikovány v souborovém systému /proc, najdete na https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running
(Podle mých zkušeností pod Linuxem se zdá, že časové razítko v adresářích /proc/ souvisí s okamžikem, kdy byl virtuální adresář nedávno zpřístupněn, spíše než s časem zahájení procesů:
# 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
Všimněte si, že v tomto případě jsem spustil příkaz "ps -p 1" asi v 16:50, pak vytvořil nový bash shell a krátce poté v tomto shellu spustil příkaz "ps -p 1 -p $$" ... .)
ls -ltrh /proc | grep YOUR-PID-HERE
Například PID mého prohlížeče Google Chrome je 11583:
ls -l /proc | grep 11583
dr-xr-xr-x 7 adam adam 0 2011-04-20 16:34 11583
V návaznosti na odpověď Adama Matana /proc/<pid>
časové razítko adresáře jako takové není nutně přímo užitečné, ale můžete použít
awk -v RS=')' 'END{print $20}' /proc/12345/stat
k získání počátečního času v tikáních hodin od spuštění systému.
Toto je trochu složitější jednotka k použití; podrobnosti viz také převod jiffies na sekundy.
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
To by vám mělo poskytnout sekundy, které můžete předat strftime()
získat (člověkem čitelné nebo jiné) časové razítko.
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
Aktualizováno s některými opravami od Stephana Chazelase v komentářích; díky jako vždy!
Pokud máte pouze Mawk, možná zkuste
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 @{}
man proc; vyhledejte čas zahájení .