So finden Sie die Betriebszeit eines linux-Prozesses
Wie finde ich die Betriebszeit eines bestimmten Linux-Prozesses?
ps aux | grep gedit | grep -v grep
Gibt mir eine ganze Menge Informationen, einschließlich der Zeit, zu der der Prozess gestartet wurde. Ich suche speziell nach einem Switch, der die Betriebszeit eines Prozesses in Millisekunden zurückgibt.
Danke
7 answers
Da "uptime" mehrere Bedeutungen hat, ist hier ein nützlicher Befehl.
ps -eo pid,comm,lstart,etime,time,args
Dieser Befehl listet alle Prozesse mit verschiedenen zeitbezogenen Spalten auf. Es hat die folgenden Spalten:
PID COMMAND STARTED ELAPSED TIME COMMAND
PID
= Prozess-ID
first COMMAND
= nur der Befehlsname ohne Optionen und ohne ArgumenteSTARTED
= die absolute Zeit, zu der der Prozess gestartet wurdeELAPSED
= verstrichene Zeit seit dem Start des Prozesses (wall clock time ), Format [[tt -] hh:] mm: ss
TIME
= kumulative CPU-Zeit, "[TT-]hh:mm:ss" format
second COMMAND
= wieder der Befehl, diesmal mit all seinen bereitgestellten Optionen und Argumenten
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-08-21 14:46:10
Wenn Sie eine begrenzte Version von ps
haben, wie sie in busybox
zu finden ist, können Sie die Prozessstartzeit abrufen, indem Sie den Zeitstempel von /proc/<PID>
betrachten. Zum Beispiel, wenn die PID, die Sie betrachten möchten, 55 ist...
# ls -al /proc | grep 55
dr-xr-xr-x 7 root root 0 May 21 05:53 55
... und dann vergleichen Sie es mit dem aktuellen Datum...
# date
Thu May 22 03:00:47 EDT 2014
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-07-14 16:33:22
Ich denke, du kannst einfach laufen:
$ stat /proc/1234
1234 ist die Prozess-ID.
Beispiel mit zwei Prozessen, die zu derselben Stunde in Sekunden, aber nicht in Millisekunden gestartet wurden:
$ stat /proc/9355
...
Access: 2017-11-13 17:46:39.778791165 +0100
Modify: 2017-11-13 17:46:39.778791165 +0100
Change: 2017-11-13 17:46:39.778791165 +0100
$ stat /proc/9209
...
Access: 2017-11-13 17:46:39.621790420 +0100
Modify: 2017-11-13 17:46:39.621790420 +0100
Change: 2017-11-13 17:46:39.621790420 +0100
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-11-15 13:01:24
Ja, zu altes und doch zu hartes Zeug. Ich habe es mit der oben vorgeschlagenen "stat" - Methode versucht, aber was wäre, wenn ich gestern das PID-Proc-Dir "berühren"würde? Dies bedeutet, dass mein einjähriger Prozess mit dem gestrigen Zeitstempel angezeigt wird. Nee, nicht was ich brauche : (
In den neueren ist es einfach:
ps -o etimes -p <PID>
ELAPSED
339521
So einfach ist das. Die Zeit ist in Sekunden. Tun Sie, wofür Sie es brauchen. Bei einigen älteren Boxen ist die Situation schwieriger, da es keine Etimes gibt. Man könnte sich verlassen auf:
ps -o etime -p <PID>
ELAPSED
76-03:26:15
Die ein " a " aussehen bit " seltsam, da es im dd-hh:mm: ss Format ist. Nicht für weitere Berechnungen geeignet. Ich hätte es in Sekunden vorgezogen, daher habe ich dieses verwendet:
ps -o etime -p <PID> --no-headers | awk -F '(:)|(-)' 'BEGIN{a[4]=1;a[3]=60;a[2]=3600;a[1]=86400;s=0};{for (i=NF;i>=1;i--) s=s+a[i]*$i}END{print s}'
339544
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-08-27 11:57:03
So eine einfache Sache wird nach 5 Jahren nicht richtig beantwortet?
Ich glaube nicht, dass Sie Millisekunden genau bekommen können. z. wenn Sie man procfs
sehen und /proc/$$/stat
sehen, das Feld 22 als Startzeit hat, was in "clock ticks" ist, hätten Sie etwas Präziseres, aber clock Ticks gehen nicht mit einer vollkommen konstanten Rate (relativ zu 'Wanduhr Zeit') und wird ausgeschaltet sein... schlafen und bestimmte Dinge (ntpd denke ich) kompensieren es. Zum Beispiel auf einem Computer mit ntpd, mit 8 Tagen Betriebszeit und hat noch nie schlief, dmesg -T
hat das gleiche Problem (glaube ich...), und Sie können es hier sehen:
# date; echo h > /proc/sysrq-trigger; dmesg -T | tail -n1 ; date
Fri Mar 3 10:26:17 CET 2017
[Fri Mar 3 10:26:16 2017] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w)
Fri Mar 3 10:26:17 CET 2017
Hier sind Sekunden:
# example pid here is just your shell
pid=$$
# current unix time (seconds since epoch [1970-01-01 00:00:00 UTC])
now=$(date +%s)
# process start unix time (also seconds since epoch)
# I'm fairly sure this is the right way to get the start time in a machine readable way (unlike ps)...but could be wrong
start=$(stat -c %Y /proc/"$pid")
# simple subtraction (both are in UTC, so it works)
age=$((now-start))
printf "that process has run for %s seconds\n" "$age"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-21 10:51:22
Nach Prozessname:
ps -eo pid,comm,lstart,etime,args | grep MyProcessName | cut -b 1-200
Wobei:
-
MyProcessName
ist der Prozessname. - Das
ps
listet alle Prozesse auf. - Das
grep
filtert nachMyProcessName
inargs
. - Das
cut
listet die ersten 200 Zeichen in jeder Zeile auf. Nützlich, da Java-Befehlszeilen oft ziemlich lang sind.
Erzeugt so etwas:
10673 java Tue Aug 25 12:26:30 2020 19:19:25 /opt/apps/java_home/bin/java -Dservice.name=MyProcessName1
10908 java Tue Aug 25 12:26:41 2020 19:19:14 /opt/apps/java_home/bin/java -Dservice.name=MyProcessName2
11062 java Tue Aug 25 12:26:52 2020 19:19:03 /opt/apps/java_home/bin/java -Dservice.name=MyProcessName3
Wir können sehen, dass alle Dienste am 26.August um 12:26 Uhr gestartet wurden und keiner von ihnen aus irgendeinem Grund neu gestartet wurde.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-08-26 07:49:40
[root@ip-x-x-x-x ec2-user]# ps -p `pidof java` -o etimes=
266433
pidof java
=> Prozess-id für java-Prozess
etimes=
=> Zeit in Sekunden und '=' ist zu entfernen header
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-01-07 23:08:32