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