Seite 1 von 1

Prozessliste/dict Linux

Verfasst: Donnerstag 26. Januar 2006, 11:40
von Brok3r
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

Verfasst: Donnerstag 26. Januar 2006, 11:42
von modelnine
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.

Verfasst: Donnerstag 26. Januar 2006, 11:45
von Brok3r
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

Verfasst: Donnerstag 26. Januar 2006, 17:29
von Joghurt
/proc/PID/cmdline enthält u.A. auch den Namen

Verfasst: Donnerstag 26. Januar 2006, 18:42
von N317V
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?

Verfasst: Freitag 27. Januar 2006, 08:45
von Brok3r
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

Verfasst: Freitag 27. Januar 2006, 09:23
von N317V
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.

Verfasst: Freitag 27. Januar 2006, 09:51
von modelnine
Brok3r, Du weißt dass es ps aux gibt?

--- Heiko.

Verfasst: Freitag 27. Januar 2006, 14:23
von Brok3r
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

Verfasst: Freitag 27. Januar 2006, 15:24
von modelnine
Brok3r, ich hab Dir gepostet wie Du die Prozessliste unter Linux kriegst. Lies noch mal genau nach.

--- Heiko.

Verfasst: Montag 30. Januar 2006, 11:56
von Brok3r
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

Verfasst: Montag 30. Januar 2006, 13:00
von modelnine
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.

Verfasst: Montag 30. Januar 2006, 13:15
von Brok3r
Super damit kommen wir doch der Sache schon sehr nahe :-)
Genau so etwas meinte ich danke dir werde ich gleich mal testen :D

Verfasst: Montag 30. Januar 2006, 13:32
von Brok3r
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? :-/

Verfasst: Montag 30. Januar 2006, 13:49
von modelnine
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.

Verfasst: Montag 30. Januar 2006, 13:55
von Brok3r
Jau super genau das wollte ich wissen damit ist auch mir Linux "Legasthemiker" wie du es auf deinem blog nennst geholfen :D

Die Befehlszeile bei mir wird sich nicht ändern da ich gezielt nach Skripten die ich aufstarte suche und die nicht , so hoffe ich , ungewollt die Befehlszeile ändern :-)

Danke für die raschen und hilfreichen Antworten

Verfasst: Montag 30. Januar 2006, 14:49
von modelnine
Jaja, da sieht man's mal wieder: ein Legastheniker. ;-)

Ganz davon abgesehen: ich bezog das nicht auf Linux-Wissen im allgemeinen, sondern auf den Gebrauch einer Distribution die elementare Dinge nicht einhält, wie zum Beispiel SuSE oder Fedora Core, nämlich solche Manpages standardmäßig mitzuinstallieren...

--- Heiko.

Verfasst: Montag 30. Januar 2006, 14:55
von Brok3r
Jo macht ja auch nichts aber auch ein (nicht)legastheniker kann sich vor tippfehlern nicht schützen ;-)
Also bei Version 10.0 von Suse sind die Manpages Standardmäßig mit dabei :)