Hallo Liste, ich versuche grade krampfhaft per ps die Prozessliste auszugeben und die Startzeit eines Prozesses als timestamp zu bekommen. Ich bekomme immer ein Mar15 oder ein 15:23 bzw. 01:36:01 aber die Startzeit nie als timestamp. Mit timestamp rechnet es sich halt einfacher. Intern wird dass doch sicher auch als timestamp gehalten, ich krieg aber leider die Ausgabe nicht hin. Hat jemand dazu einen Tipp. Danke Andre -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 17 Mär 2008, Andre Hübner schrieb:
ich versuche grade krampfhaft per ps die Prozessliste auszugeben und die Startzeit eines Prozesses als timestamp zu bekommen. Ich bekomme immer ein Mar15 oder ein 15:23 bzw. 01:36:01 aber die Startzeit nie als timestamp. Mit timestamp rechnet es sich halt einfacher. Intern wird dass doch sicher auch als timestamp gehalten, ich krieg aber leider die Ausgabe nicht hin.
Geht auch mit der aktuellen Version 3.2.7 von procps nicht, es gibt schlicht kein Feld dafür. Siehe ps/output.c in den Quellen. Man kann es aber "hacken", in dem man eine Lib bäckt, die ctime umbiegt und diese dann per LD_PRELOAD lädt... Dürfte praktischer sein, als mit anhand der PIDs die Startzeiten selber aus /proc herauszupfriemeln... Näheres bei Interesse (sind halt doch ein paar Zeilen, v.a. mit Makefile, was in dem Fall nicht ganz unwichtig ist ;) $ make [..] LD_PRELOAD=./libctimeastimestamp.so ps -eo lstart,cmd | tail -n 2 1205810553 ps -eo lstart,cmd 1205810553 tail -n 2 $ Weitere Felder kann man natürlich noch dazunehmen, das Feld für lstart wird halt in ps/output.c von procps so breit formatiert, da kann man nicht direkt was machen. Und ein anderes Format zu nehmen geht auch nicht so einfach, da dort die Ausgabe von ctime noch manipuliert wird. Ein Beispiel der Weiterverarbeitung: $ LD_PRELOAD=./libctimeastimestamp.so ps -eo lstart,cmd \ | tail -n 3 | awk '{ $1 = strftime("["$1"] %c ", $1); print;}' [1205811965] Tue Mar 18 04:46:05 2008 ps -eo lstart,cmd [1205811965] Tue Mar 18 04:46:05 2008 tail -n 3 [1205811965] Tue Mar 18 04:46:05 2008 awk { $1 = strftime("["$1"] %c ", $1); print;} Also, bei Interesse melden, wobei wir in opensuse-programming-de "onT" wären, da könnte ich die Details mailen... X-Mailed & F'up 2 opensuse-programming-de -dnh -- Shin - Device for finding furniture in the dark. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
hmm, das scheint mir etwas umfangreich und zu viel eingriff ins system. Ich hab's jetzt so gemacht daß ich mit ps axu die Prozesse rausgreppe die mich interessieren und dann anhand Trennzeichen in einen Array werfe. mit mktime mach ich dann nen Timestamp draus. schreib mir grad mal so die ausgaben mit, sieht aber erstmal ganz ok aus. Andre ----- Original Message ----- From: "David Haller" <lists@dhaller.de> To: <opensuse-de@opensuse.org> Cc: <opensuse-programming-de@opensuse.org> Sent: Tuesday, March 18, 2008 4:52 AM Subject: Re: ps timestamp Hallo, Am Mon, 17 Mär 2008, Andre Hübner schrieb:
ich versuche grade krampfhaft per ps die Prozessliste auszugeben und die Startzeit eines Prozesses als timestamp zu bekommen. Ich bekomme immer ein Mar15 oder ein 15:23 bzw. 01:36:01 aber die Startzeit nie als timestamp. Mit timestamp rechnet es sich halt einfacher. Intern wird dass doch sicher auch als timestamp gehalten, ich krieg aber leider die Ausgabe nicht hin.
Geht auch mit der aktuellen Version 3.2.7 von procps nicht, es gibt schlicht kein Feld dafür. Siehe ps/output.c in den Quellen. Man kann es aber "hacken", in dem man eine Lib bäckt, die ctime umbiegt und diese dann per LD_PRELOAD lädt... Dürfte praktischer sein, als mit anhand der PIDs die Startzeiten selber aus /proc herauszupfriemeln... Näheres bei Interesse (sind halt doch ein paar Zeilen, v.a. mit Makefile, was in dem Fall nicht ganz unwichtig ist ;) $ make [..] LD_PRELOAD=./libctimeastimestamp.so ps -eo lstart,cmd | tail -n 2 1205810553 ps -eo lstart,cmd 1205810553 tail -n 2 $ Weitere Felder kann man natürlich noch dazunehmen, das Feld für lstart wird halt in ps/output.c von procps so breit formatiert, da kann man nicht direkt was machen. Und ein anderes Format zu nehmen geht auch nicht so einfach, da dort die Ausgabe von ctime noch manipuliert wird. Ein Beispiel der Weiterverarbeitung: $ LD_PRELOAD=./libctimeastimestamp.so ps -eo lstart,cmd \ | tail -n 3 | awk '{ $1 = strftime("["$1"] %c ", $1); print;}' [1205811965] Tue Mar 18 04:46:05 2008 ps -eo lstart,cmd [1205811965] Tue Mar 18 04:46:05 2008 tail -n 3 [1205811965] Tue Mar 18 04:46:05 2008 awk { $1 = strftime("["$1"] %c ", $1); print;} Also, bei Interesse melden, wobei wir in opensuse-programming-de "onT" wären, da könnte ich die Details mailen... X-Mailed & F'up 2 opensuse-programming-de -dnh -- Shin - Device for finding furniture in the dark. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Die, 18 Mär 2008, Andre Hübner schrieb:
hmm, das scheint mir etwas umfangreich und zu viel eingriff ins system.
Es ist eben gerade *kein* Eingriff ins System! Du bäckst nur die lib, packst den Aufruf von ps mit LD_PRELOAD in (d)ein script und fertig. Und bitte kein TOFU. -dnh -- Top 100 things you don't want the sysadmin to say: 51. YEEEHA!!! What a CRASH!!! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Liste,
ich versuche grade krampfhaft per ps die Prozessliste auszugeben und die Startzeit eines Prozesses als timestamp zu bekommen. Ich bekomme immer ein Mar15 oder ein 15:23 bzw. 01:36:01 aber die Startzeit nie als timestamp. Mit timestamp rechnet es sich halt einfacher. Intern wird dass doch sicher auch als timestamp gehalten, ich krieg aber leider die Ausgabe nicht hin. Hat jemand dazu einen Tipp.
Du kannst die entsprechenden Zahlen dem /proc Filesystem entnehmen. Der Prozess 1234 hat seine Startzeit in /proc/1234/stat in der 22.Spalte. Allerdings ist die Angabe in "jiffies after reboot". Bei mir (hz=1024) bedeutet z.B. 339275686 jiffies after reboot == 331323.912 sec früher == Mon Mar 31 09:13:54 2008 In /proc/uptime steht, vor wie vielen Sekunden der Rechner gebootet wurde (erste Spalte) und mit perl -e 'use POSIX; print POSIX::sysconf &POSIX::_SC_CLK_TCK' erhältst Du die Taktung (hz), bei mir 1024 (SLES9) oder 100 (opensuse-10.3). mit freundlichen Grüßen Bernd Melchers -- Archiv- und Backup-Service | fab-service@zedat.fu-berlin.de Freie Universität Berlin | Tel. (030) 838-55905 und -56066 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Andre Hübner
-
Bernd Melchers
-
David Haller