Prozessliste/dict Linux

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.
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Prozessliste/dict Linux

Beitragvon Brok3r » Donnerstag 26. Januar 2006, 11:40

Hi @ All!

Sorry bin grad ziemlich verwirrt :-/
Suche verzweifelt nach einer Funktion zur Rückgabe der Prozessliste unter Linux :-/
Unter Windwos hab ich das schon hinbekommen mit dieser Funktion:

Code: Alles auswählen

def getprocessdict():
    wmi = win32com.client.GetObject("winmgmts:")
    result = wmi.ExecQuery("SELECT * FROM Win32_Process")
    tasks = {}
    for elem in result:
        name=elem.Name.lower()
        try:
            tasks[name].append(elem.ProcessId)
        except KeyError:
            tasks[name]=[elem.ProcessId]   
    return tasks


Gibt es etwas equivalentes auch unter Linux? Ist mir etwas müssig mit einem os.system("ps") an die Prozessliste zu kommen.
Geht ja sicher auch direkt oder?:-/
Danke mal im voraus

mfg Brok3r
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Donnerstag 26. Januar 2006, 11:42

Zum Beispiel unter Linux mit:

Code: Alles auswählen

import os

def listProcesses():
    rv = []
    for i in os.listdir("/proc"):
        try:
            rv.append(int(i))
        except ValueError:
            pass
    return rv

print listProcesses()


Wenn Du mehr Informationen brauchst: man proc, das zeigt Dir welche besonderen Files noch unter /proc/<pid>/ liegen (/proc/<pid> ist ein Verzeichnis in dem Prozess-Informationen liegen).

--- Heiko.
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Donnerstag 26. Januar 2006, 11:45

danke für die schnelle antwort :-)
Bin leider unter UNIX OS leider nicht so fit wie ich das eventuell sein sollte :cry:
werde mich dann mal näher damit befassen :roll:

Leider funktionier man proc nicht wie gewünscht :-/
Mich würde auch interessieren welcher Prozess hinter der ID unter /proc steht
was ich aber so leider wohl nicht ohne weiteres kann ich hätte gerne eine Liste wie das "ps -ef" zurückgibt
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Donnerstag 26. Januar 2006, 17:29

/proc/PID/cmdline enthält u.A. auch den Namen
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Donnerstag 26. Januar 2006, 18:42

Brok3r hat geschrieben:Leider funktionier man proc nicht wie gewünscht :-/

http://www.manpages.info/linux/proc.5.html

Brok3r hat geschrieben:ich hätte gerne eine Liste wie das "ps -ef" zurückgibt


Was ist denn an ps schlecht bzw. müßig?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Freitag 27. Januar 2006, 08:45

Das man über ps nur die Prozesse, welche vom aktuellen Login gestartet wurden zurückgeliefert bekommt.
Ebenso erhält man keine Information darüber welche Python Datei ausgeführt wird sondern nur das ein Prozess von Python gestartet wurde welcher genau erfährt man eben nicht.

man proc in der shell eingegeben dann erhält man genau die Infos die dein Link beinhaltet aber wie schon erwähnt hilft mir das nicht....

Habe das Problem jedch anderweitig gelöst danke trotzdem für die Mühe

mfg Brok3r
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Freitag 27. Januar 2006, 09:23

Brok3r hat geschrieben:man proc in der shell eingegeben dann erhält man genau die Infos die dein Link beinhaltet aber wie schon erwähnt hilft mir das nicht....

Ach, so! Ich dachte es würde nicht funktionieren. :-)
Im Übrigen lohnt es sich oft auch zusätzlich zur man-page die info-pages anzuschauen. Ob es das für proc gibt, weiß ich im Moment aber nicht.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Freitag 27. Januar 2006, 09:51

Brok3r, Du weißt dass es ps aux gibt?

--- Heiko.
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Freitag 27. Januar 2006, 14:23

jo aber die Infos die mir ps aux ausgibt interessieren mich nicht wirklich cpu usage mem usage etc sind für mich gänzlich uninteressant momentan.
Wir schweifen aber etwas vom Thema ab ich wollte ursprünglich wissen wie ich an eine Prozessliste im Python komme und zwar direkt ohne irgendwelche shellcommands abzusetzen..

Wenn das jemand weiß wäre es nett wenn er es hier postet.

mfg Brok3r
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Freitag 27. Januar 2006, 15:24

Brok3r, ich hab Dir gepostet wie Du die Prozessliste unter Linux kriegst. Lies noch mal genau nach.

--- Heiko.
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Montag 30. Januar 2006, 11:56

Ja das hab ich schon gesehen..
Glaub ich muss mal an meiner Ausdrucksweise arbeiten.
Die einfache Prozessliste nutzt mir nichts...
Ich brauche eine Zuordnung PRozess -> Datei die ausgeführt wird..
Das erhalte ich aber nur durch reines einlesen der vorhandenen Prozesse unter /proc nicht..
Da erhalte ich nur die Prozess ids aber keine Info darüber welche Datei dahinter steckt
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Montag 30. Januar 2006, 13:00

Du meinst welcher Prozess im Sinne von Datei auf der Platte dahinter steckt? Das geht prinzipiell zwar, ist aber zum einen nicht fehlerfrei (im Sinne von die Datei auf die es verweist kann oder kann nicht existieren), zum anderen kann es nur root.

Probier mal:

Code: Alles auswählen

import os

print os.readlink("/proc/<pid>/exe")


Wobei <pid> natürlich durch die PID des Prozesses den Du abfragen willst zu ersetzen ist.

--- Heiko.
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Montag 30. Januar 2006, 13:15

Super damit kommen wir doch der Sache schon sehr nahe :-)
Genau so etwas meinte ich danke dir werde ich gleich mal testen :D
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

Beitragvon Brok3r » Montag 30. Januar 2006, 13:32

habs getestet und es tuts soweit...
Allerdings erhalte ich nur das Programm welches ausgeführt wird nicht jedoch die Datei also z.b bei einem Python skript nur usr/bin/python....
aber nicht das ausgeführte Skript gibt es auch eine Möglichkeit daran zu kommen?
ich habe selbst auch nachgesehen aber bis auf ein cwd finde ich nicht mehr Infos unter /proc/<pid>/
aber ps -ef muss die Info ja auch irgendwoher bekommen und von dem her müßte es ja in der Theorie realisierbar sein oder täusche ich mich da? :-/
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Montag 30. Januar 2006, 13:49

Probier mal:

Code: Alles auswählen

print open("/proc/<pid>/cmdline").read().split("\x00")[:-1]


Das ganze ist aber nicht umbedingt korrekt was da drinsteht, da ein Prozess seine Befehlszeile ändern kann.

--- Heiko.

Wer ist online?

Mitglieder in diesem Forum: djevil