Seite 1 von 1
Prozessinformationen aus der tasklist.exe, Alternativen?
Verfasst: Dienstag 4. November 2008, 10:55
von Nergal
Hallo,
ich möchte Informationen über die einzelnen Prozesse aus der tasklist.exe abgreifen um zu schauen ob Prozess xy noch "lebt".
Durch
tasklist /FI "PID eq .... /FO CSV"
hole ich mir die Prozesspalte und parse sie dann.
Nur stellt sich mir eine Frage:
"Ist tasklist auf allen Betriebssystemen vorinstalliert oder gibt es dort Einschränkungen?"
Soweit ich das verfolgen konnte, hat 2K das Programm tlist.exe. Wobei ich nicht weiß, ob das einen ähnlichen Output erzeugt und zu Vista konnte ich noch nichts finden.
Gibt es evtl. eine andere Möglichkeit mit annähernd 100%iger Sicherheit an Prozessinformationen zu kommen?
Gruß
Nergal
Verfasst: Dienstag 4. November 2008, 11:27
von HWK
Dieser
Thread sollte Dir reichlich Infos dazu liefern. Wenn es nur um Windows geht, sollte v.a.
das hier interessant sein. tasklist.exe befindet sich z.B. nicht auf meinem Windows XP Home.
MfG
HWK
Verfasst: Dienstag 4. November 2008, 11:36
von Nergal
Danke,
hab den Thread scheinbar übersehen.
Wobei er die Frage zu der tasklist.exe auch nicht wirklich beantwortet.
Gruß
Nergal
Re: Prozessinformationen aus der tasklist.exe, Alternativen?
Verfasst: Dienstag 4. November 2008, 11:48
von Leonidas
Nergal hat geschrieben:Gibt es evtl. eine andere Möglichkeit mit annähernd 100%iger Sicherheit an Prozessinformationen zu kommen?
API-Zugriffe über pywin32/ctypes.
Verfasst: Dienstag 4. November 2008, 11:50
von Nergal
Danke,
weißt du ob ctypes mit allen gängigen Windows Betriebssystemen funktioniert?
Habe es im Moment nur unter Windows XP getestet.
In dem Tutorial steht nur etwas von XP/2K und NT, mich würde vor allem Vista interessieren.
Gruß
Nergal
Verfasst: Dienstag 4. November 2008, 12:00
von HWK
Probier
das doch einfach mal auf Vista aus.
MfG
HWK
Verfasst: Dienstag 4. November 2008, 12:06
von Leonidas
Nergal hat geschrieben:In dem Tutorial steht nur etwas von XP/2K und NT, mich würde vor allem Vista interessieren.
Warum sollte es nicht? Schließlich ist es auch nur ein NT mit noch bunterer Oberfläche.
Verfasst: Dienstag 4. November 2008, 13:24
von Nergal
Dann werd ich das mal für meine Bedürfnisse umbauen.
Danke für die schnelle Hilfe.
Verfasst: Mittwoch 5. November 2008, 10:45
von Nergal
HWK hat geschrieben:Probier
das doch einfach mal auf Vista aus.
MfG
HWK
Mußte gerade feststellen, daß einige Prozesse nicht gefunden werden:
- csrss.exe
- dspsvcn.exe
- scardsvr.exe
- svchost.ese (mehrmals)
Weiß jemand woran das liegen kann?
Verfasst: Mittwoch 5. November 2008, 13:23
von lunar
Vielleicht listet tasklist.exe ähnlich "ps" nur Prozesse des aktuellen Nutzers auf, wenn man ihm nicht explizit etwas anderes sagt.
Btw, schau dir mal
enumprocess an.
Verfasst: Mittwoch 5. November 2008, 13:26
von HWK
Ich kann Deine Feststellung bestätigen. Warum das so ist, weiß ich nicht. Ich habe aber noch eine Möglichkeit gefunden, die PID und viele andere Prozess-Informationen mit WMI herauszufinden. Da WMI auf allen Windows-Varianten verfügbar ist (ab ME sogar vorinstalliert), ist dieses Verfahren wohl auch das sicherere.
Code: Alles auswählen
import win32com.client
strComputer = '.'
objWMIService = win32com.client.Dispatch('WbemScripting.SWbemLocator')
objSWbemServices = objWMIService.ConnectServer(strComputer, 'root\cimv2')
colItems = objSWbemServices.ExecQuery('SELECT * FROM Win32_Process')
for objItem in colItems:
print objItem.Caption, objItem.ProcessId,
if objItem.CommandLine is None:
print '*'
else:
print
Auffällig ist, dass die im ersten Script nicht dargestellten Prozesse wie csrss etc. keine Commandline haben (siehe *).
MfG
HWK
Verfasst: Mittwoch 5. November 2008, 13:29
von lunar
Diese Prozesse sind afaik Dienste, die werden von Windows anders behandelt als normale Prozesse.
Btw, bist du sicher, dass WMI auf jedem System verfügbar ist. Ich meine mich zu erinnern, dass ich vor ein paar Jahren mal Probleme mit der Verfügbarkeit von WMI-Objekten auf XP Home hatte.
Verfasst: Mittwoch 5. November 2008, 13:41
von HWK
lunar hat geschrieben:Btw, bist du sicher, dass WMI auf jedem System verfügbar ist. Ich meine mich zu erinnern, dass ich vor ein paar Jahren mal Probleme mit der Verfügbarkeit von WMI-Objekten auf XP Home hatte.
Ja, ich bin sicher. Ich arbeite übrigens selbst unter XP Home.
lunar hat geschrieben:Diese Prozesse sind afaik Dienste, die werden von Windows anders behandelt als normale Prozesse.
Welche Prozesse meinst Du? Die mit WMI bestimmten? Das sind nicht nur Dienste. Z.B. tauchen hier auch pythonw.exe und SciTE.exe auf. Zumal diese Liste bei mir haargenau mit der Ausgabe von pslist übereinstimmt. Mit tasklist kann ich es leider nicht vergleichen, da es bei XP Home nicht dazugehört.
MfG
HWK
Verfasst: Mittwoch 5. November 2008, 13:43
von lunar
HWK hat geschrieben:lunar hat geschrieben:Btw, bist du sicher, dass WMI auf jedem System verfügbar ist. Ich meine mich zu erinnern, dass ich vor ein paar Jahren mal Probleme mit der Verfügbarkeit von WMI-Objekten auf XP Home hatte.
Ja, ich bin sicher. Ich arbeite übrigens selbst unter XP Home.
Ok.
lunar hat geschrieben:Diese Prozesse sind afaik Dienste, die werden von Windows anders behandelt als normale Prozesse.
Welche Prozesse meinst Du?
Die Prozesse ohne Kommandozeile bzw. die, die im anderen Skript nicht gefunden wurden.
Verfasst: Mittwoch 5. November 2008, 13:58
von HWK
Wirklich? csrss wird
hier z.B. als Laufzeitprozess beschrieben. Das scheint mir also kein Dienst zu sein. Und warum tauchen dann die vielen anderen Dienste in der zweiten Liste nicht auf?
MfG
HWK
Verfasst: Mittwoch 5. November 2008, 14:04
von Nergal
Tasklist listet alle! Prozesse auf, wie der TaskManager, also auch die, an die ich per ctypes in der genannten Variante nicht komme.
Werde mir WMI mal anschauen und ggf. deinen Code an meine Bedürfnisse anpassen.
Danke für die Anregungen.
Gruß
Nergal
Verfasst: Mittwoch 5. November 2008, 20:59
von lunar
HWK hat geschrieben:Wirklich? csrss wird
hier z.B. als Laufzeitprozess beschrieben.
Was ist denn ein "Laufzeitprozess"?
Das scheint mir also kein Dienst zu sein.
Es ist ein Dienst, siehe
Wikipedia. Dem Dienst verdankst du deine Windows Console (siehe
MSDN und
The old new thing).
Und warum tauchen dann die vielen anderen Dienste in der zweiten Liste nicht auf?
Über welche zweite Liste reden wir jetzt? Soweit ich das verstanden hatte, werden genau die Prozesse nicht gefunden, die bei der WMI-Variante keine Kommandozeile haben. Und davon sind zumindest csrss und svchost Dienste.
Verfasst: Mittwoch 5. November 2008, 23:01
von HWK
lunar hat geschrieben:Und davon sind zumindest csrss und svchost Dienste.
svchost wird aber in der ersten Liste 2 mal, in der zweiten Liste 5 mal angezeigt.
MfG
HWK
Verfasst: Mittwoch 5. November 2008, 23:31
von Qubit
Nergal hat geschrieben:Tasklist listet alle! Prozesse auf, wie der TaskManager, also auch die, an die ich per ctypes in der genannten Variante nicht komme.
Werde mir WMI mal anschauen und ggf. deinen Code an meine Bedürfnisse anpassen.
Ich halte es zwar für bedenklich, wenn man OS-spezifische Interfaces verwenden will (und dies nicht auf einem gewissen generischen "abstract layer" implementiert), aber für mich wäre hier die Wahl unter Windows die Powershell..
Hat da jemand Erfahrung?
Verfasst: Mittwoch 5. November 2008, 23:44
von HWK
Qubit hat geschrieben:aber für mich wäre hier die Wahl unter Windows die Powershell..
Hat da jemand Erfahrung?
Aber warum denn nicht WMI? Es ist auf allen Windows-Versionen verfügbar und mein Script mit WMI liefert dieselbe Ausgabe wie pslist, was ja an tasklist angelehnt ist.
MfG
HWK