Seite 1 von 1

Laufzeit oder Startzeit von Programmen?

Verfasst: Dienstag 29. Januar 2008, 12:10
von larf
Hi,

Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?

Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war. :oops:

Re: Laufzeit oder Startzeit von Programmen?

Verfasst: Dienstag 29. Januar 2008, 13:06
von keppla
larf hat geschrieben:Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?
time

Strenggenommen nicht unbedingt eine Python-Frage...

Re: Laufzeit oder Startzeit von Programmen?

Verfasst: Dienstag 29. Januar 2008, 13:18
von larf
keppla hat geschrieben:
larf hat geschrieben:Gibt es eine Funktion, die mir relativ komfortabel die Startzeit oder die Laufzeit eines beliebigen Programmes, das auf einem *nix-System läuft, ausgibt?
time

Strenggenommen nicht unbedingt eine Python-Frage...
Du hast gelesen was ich schrieb? :roll:

Ich will ermitteln, seit wann bzw. wie lange ein beliebiges Programm läuft und es nicht starten, um zu wissen wie lange es läuft (dafür wäre time gut, ja). Dafür nutzt man auf der Konsole im allgemeinen ps.

Und um es nochmal zu wiederholen:
Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war.

Re: Laufzeit oder Startzeit von Programmen?

Verfasst: Dienstag 29. Januar 2008, 14:15
von keppla
Du hast gelesen was ich schrieb? :roll:
Ja. Du hast es lediglich mehrdeutig Formuliert.
Ich will ermitteln, seit wann
so ist es schon eindeutiger.
Lässt sich natürlich auch über den Befehl ps machen. aber ist nicht so ganz komfortabel.
Ich bin mir ziemlich sicher, dass ich sowas schonmal gesehen habe, bin mir aber nicht sicher ob es Python war.
ist deine Frage also vielleicht eher "gibt es einen Befehl in python, der..."?
Was meinst du mit komfortabel? Was erwartest du als Antwort vom Befehl?

Code: Alles auswählen

ps -o start='' -p 6845
sieht in meinen Augen nicht so unkonfortabel aus.

Re: Laufzeit oder Startzeit von Programmen?

Verfasst: Dienstag 29. Januar 2008, 15:12
von larf
keppla hat geschrieben: ist deine Frage also vielleicht eher "gibt es einen Befehl in python, der..."?
Was meinst du mit komfortabel? Was erwartest du als Antwort vom Befehl?

Code: Alles auswählen

ps -o start='' -p 6845
sieht in meinen Augen nicht so unkonfortabel aus.
Nunja, zum Anzeigen ist das sicherlich ok, wenn ich es allerdings weiter verarbeiten möchte, stehe ich vor dem Problem, dass die Ausgabe unterschiedlich ist:
Bei Prozessen, die schon länger als 24 Stunden laufen, wird die Startzeit als "Monat Tag" angezeigt, bei allen anderen als Stunden:Minuten:Sekunden, d.h. um es weiter in meinem Programm nutzen zu können, muss ich es in ein einheitliches Format bringen. Ich hatte gehofft, Python würde mir das in irgendeiner Form abnehmen.

Verfasst: Dienstag 29. Januar 2008, 15:27
von Matflasch
Wie wäre es mit:

Code: Alles auswählen

ps -o lstart -p 7571
                 STARTED
Wed Dec  5 15:40:44 2007
"man ps" ;)

Das kannst du dann ja auseinander nehmen :)

edit:

Code: Alles auswählen

ps -o lstart="" -p 7571                                                                      
Wed Dec  5 15:40:44 2007

Verfasst: Dienstag 29. Januar 2008, 16:01
von larf
Matflasch hat geschrieben: "man ps" ;)

Das kannst du dann ja auseinander nehmen :)
Ok, soweit ist das natürlich einfacher, da es einheitlich ist. Danke für den Hinweis.
Aber auseinanderklamuesern muss man es natürlich immernoch und davor wollte ich mich eigentlich drücken. :wink:

Verfasst: Dienstag 29. Januar 2008, 16:05
von EyDu
Naja, der reguläre Ausdruck ist doch nun wirklich fast geschenkt. Und zur Not ist es mit ein paar "split"s auch schnell erledigt.

Verfasst: Dienstag 29. Januar 2008, 16:08
von Matflasch
Ok, in Python:

Code: Alles auswählen

import subprocess

cmd = 'ps -o lstart="" -p 9543'
pinfo = subprocess.Popen(cmd, shell='true', stdout=subprocess.PIPE)
pstart = pinfo.stdout.read().split()
print pstart
['Tue', 'Jan', '29', '10:55:01', '2008']
Oder soll es direkt in der Shell sein?

Verfasst: Dienstag 29. Januar 2008, 16:20
von larf
Matflasch hat geschrieben:Ok, in Python:

Code: Alles auswählen

import subprocess

cmd = 'ps -o lstart="" -p 9543'
pinfo = subprocess.Popen(cmd, shell='true', stdout=subprocess.PIPE)
pstart = pinfo.stdout.read().split()
print pstart
['Tue', 'Jan', '29', '10:55:01', '2008']
Oder soll es direkt in der Shell sein?
Tss, das ist aber simpel. Ich bräuchte dann noch den Code, mit dem ich einer Process-ID die Startzeit zuordnen kann und damit dann die aktuelle Laufzeit bestimmen kann. Kannst du das grade noch schreiben? :mrgreen:

(Um sicherzugehen, dass ich keinen Unmut erzeige: die letzten zwei Sätze waren nicht ernst gemeint).

Jedenfalls danke für eure Vorschläge - auch wenn die Antwort auf meine ursprüngliche Frage "nein" war, aber ich habe ja verdeutlicht bekommen dass meine Faulheit unbegründet war. :wink:

Verfasst: Dienstag 29. Januar 2008, 19:13
von BlackJack
Eine Shell-Lösung:

Code: Alles auswählen

#!/bin/sh

PID=$1

START=$(date --date="$(ps -o lstart='' -p $PID)" +%s)
NOW=$(date +%s)
DURATION=$(( $NOW - $START ))
echo "   start: $(date --date=@$START +'%Y-%m-%d %H:%M:%S')"
echo "duration: $(date --date=@$DURATION +'%jd %H:%M:%S')"

Verfasst: Dienstag 29. Januar 2008, 20:33
von lunar
dateutil.parser existiert ja auch noch:

Code: Alles auswählen

[lunar@nargond]-[20:15:53] >> /home/lunar
[1]--> from dateutil.parser import parse

[lunar@nargond]-[20:16:01] >> /home/lunar
[2]--> parse('Wed Dec  5 15:40:44 2007 ')
Out[2]: datetime.datetime(2007, 12, 5, 15, 40, 44)
Und die Info steht sicherlich auch irgendwo unterhalb /proc, so dass man sich nicht mal die Mühe machen muss, ps aufzurufen.

Verfasst: Dienstag 29. Januar 2008, 20:52
von BlackJack
Unter `/proc/` stehen die Zeiten in Jiffies. Wie lang ein Jiffie ist, hängt vom Kernel ab und ich habe noch keine Möglichkeit gefunden das irgendwie heraus zu finden. Abgesehen von Konstanten in C-Header-Dateien, aber auf die hat man zur Laufzeit eines Python-Programms ja nicht unbedingt Zugriff.

Verfasst: Mittwoch 30. Januar 2008, 19:05
von lunar
BlackJack hat geschrieben:Unter `/proc/` stehen die Zeiten in Jiffies. Wie lang ein Jiffie ist, hängt vom Kernel ab und ich habe noch keine Möglichkeit gefunden das irgendwie heraus zu finden.
Was ist mit /proc/config.gz, Option CONFIG_HZ oder /proc/timer_list, Timer "clock 1"?

Verfasst: Mittwoch 30. Januar 2008, 20:17
von BlackJack
Sieht schlecht aus:

Code: Alles auswählen

bj@s8n:~$ ls /proc/config*
ls: /proc/config*: No such file or directory
bj@s8n:~$ ls /proc/timer*
ls: /proc/timer*: No such file or directory

Verfasst: Mittwoch 30. Januar 2008, 20:26
von lunar
BlackJack hat geschrieben:

Code: Alles auswählen

bj@s8n:~$ ls /proc/config*
ls: /proc/config*: No such file or directory
bj@s8n:~$ ls /proc/timer*
ls: /proc/timer*: No such file or directory
Tja, schon blöd, wenn Ubuntu den Kernel so kastriert, nicht wahr? ;)

Jetzt wüsste ich aber auch nicht mehr, wo man die Info noch herkriegen kann.