GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit čas zahájení dlouhotrvajícího linuxového procesu?

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í .


Linux
  1. Jak používat Linux Touch Command + příklady

  2. Jak získám cestu k procesu v Unixu / Linuxu

  3. Jak získat ID procesu pro ukončení procesu nohup?

  1. jak spustit server tomcat v linuxu?

  2. Jak mohu získat čas nástěnných hodin běžícího procesu?

  3. Jak získat fyzickou velikost souboru v Linuxu?

  1. Najděte čas provedení příkazu nebo procesu v systému Linux

  2. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  3. Linux – jak získat čas nástěnných hodin běžícího procesu?