Laufzeit oder Startzeit von Programmen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
larf
User
Beiträge: 8
Registriert: Samstag 5. Januar 2008, 22:43

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:
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

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...
larf
User
Beiträge: 8
Registriert: Samstag 5. Januar 2008, 22:43

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.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

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.
larf
User
Beiträge: 8
Registriert: Samstag 5. Januar 2008, 22:43

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.
Benutzeravatar
Matflasch
User
Beiträge: 41
Registriert: Donnerstag 25. März 2004, 15:42
Wohnort: Hamburg
Kontaktdaten:

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
larf
User
Beiträge: 8
Registriert: Samstag 5. Januar 2008, 22:43

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:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Naja, der reguläre Ausdruck ist doch nun wirklich fast geschenkt. Und zur Not ist es mit ein paar "split"s auch schnell erledigt.
Benutzeravatar
Matflasch
User
Beiträge: 41
Registriert: Donnerstag 25. März 2004, 15:42
Wohnort: Hamburg
Kontaktdaten:

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?
larf
User
Beiträge: 8
Registriert: Samstag 5. Januar 2008, 22:43

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:
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')"
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.
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.
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"?
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
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.
Antworten