Prozessinformationen aus der tasklist.exe, Alternativen?

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
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

Danke,

hab den Thread scheinbar übersehen.
Wobei er die Frage zu der tasklist.exe auch nicht wirklich beantwortet.

Gruß
Nergal
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Probier das doch einfach mal auf Vista aus.
MfG
HWK
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

Dann werd ich das mal für meine Bedürfnisse umbauen.
Danke für die schnelle Hilfe.
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

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?
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.
Zuletzt geändert von lunar am Mittwoch 5. November 2008, 13:27, insgesamt 1-mal geändert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

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
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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Qubit
User
Beiträge: 128
Registriert: Dienstag 7. Oktober 2008, 09:07

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?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Antworten