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

Dienstag 29. Januar 2008, 12:10

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

Dienstag 29. Januar 2008, 13:06

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

Dienstag 29. Januar 2008, 13:18

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

Dienstag 29. Januar 2008, 14:15

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

Dienstag 29. Januar 2008, 15:12

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:

Dienstag 29. Januar 2008, 15:27

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

Dienstag 29. Januar 2008, 16:01

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: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 29. Januar 2008, 16:05

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:

Dienstag 29. Januar 2008, 16:08

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

Dienstag 29. Januar 2008, 16:20

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

Dienstag 29. Januar 2008, 19:13

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

Dienstag 29. Januar 2008, 20:33

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

Dienstag 29. Januar 2008, 20:52

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

Mittwoch 30. Januar 2008, 19:05

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

Mittwoch 30. Januar 2008, 20:17

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
Antworten