GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich die Startzeit eines lang andauernden Linux-Prozesses?

Sie können einen Formatierer angeben und lstart verwenden , wie dieser Befehl:

ps -eo pid,lstart,cmd

Der obige Befehl gibt alle Prozesse aus, mit Formatierern, um PID, Befehlsausführung und Datum + Uhrzeit zu erhalten.

Beispiel (von der Debian/Jessie-Befehlszeile)

$ 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]                    
      ...

Sie können ps lesen 's manpage oder überprüfen Sie die Seite von Opengroup für die anderen Formatierer.


Der Befehl ps (zumindest die von vielen Linux-Distributionen verwendete procps-Version) hat eine Reihe von Formatfeldern, die sich auf die Startzeit des Prozesses beziehen, einschließlich lstart die immer das vollständige Datum und die Uhrzeit des Prozessstarts angibt:

# 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

Eine Diskussion darüber, wie die Informationen im /proc-Dateisystem veröffentlicht werden, finden Sie unter https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running

(Nach meiner Erfahrung unter Linux scheint sich der Zeitstempel auf den Verzeichnissen /proc/ auf einen Moment zu beziehen, in dem kürzlich auf das virtuelle Verzeichnis zugegriffen wurde, und nicht auf die Startzeit der Prozesse:

# 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

Beachten Sie, dass ich in diesem Fall gegen 16:50 Uhr einen Befehl "ps -p 1" ausgeführt, dann eine neue Bash-Shell erstellt und kurz darauf den Befehl "ps -p 1 -p $$" in dieser Shell ausgeführt habe ... .)


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

Beispielsweise lautet die PID meines Google Chrome 11583:

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

Als Fortsetzung der Antwort von Adam Matan, der /proc/<pid> Der Zeitstempel des Verzeichnisses als solcher ist nicht unbedingt direkt nützlich, aber Sie können

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

um die Startzeit in Takten seit dem Systemstart zu erhalten.

Dies ist eine etwas schwierig zu verwendende Einheit; siehe auch Jiffies in Sekunden umwandeln für Details.

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

Dies sollte Ihnen Sekunden geben, die Sie an strftime() übergeben können um einen (vom Menschen lesbaren oder anderweitig) Zeitstempel zu erhalten.

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

Aktualisiert mit einigen Korrekturen von Stephane Chazelas in den Kommentaren; Danke wie immer!

Wenn Sie nur Mawk haben, versuchen Sie es vielleicht

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

Mann proc; suchen Sie nach Startzeit .


Linux
  1. Verwendung des Linux-Touch-Befehls + Beispiele

  2. Wie bringe ich meinen Golang-Webserver dazu, im Hintergrund zu laufen?

  3. Wie starte ich den Tomcat-Server unter Linux?

  4. Wie kann ich die Uhrzeit eines laufenden Prozesses abrufen?

  5. Wie erhalte ich die physische Größe einer Datei unter Linux?

So ändern Sie die Priorität eines Prozesses in Linux

So erhalten Sie die CPU-Auslastung eines einzelnen Prozesses in Linux

So erhalten Sie die Anzahl der Prozessoren / Kerne in Linux

So beenden oder beenden Sie einen Linux-Prozess:Der ultimative Leitfaden

So finden Sie die PID und PPID eines Prozesses in Linux

So senden Sie Prozesse unter Linux an den Hintergrund