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

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:

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

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
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

/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

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

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

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:

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

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

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:

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

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:

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

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

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:

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

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
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

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

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 :)
Antworten