Verfolgen Sie, welches Programm einen bestimmten Prozess startet?

7

Es gibt einen bestimmten Prozess, der mich stört und der ungefähr eine Minute nach dem Beenden über die Eingabeaufforderung oder den Task-Manager kontinuierlich gestartet wird.

Derzeit gehe ich mit der Methode vor, eine Batch-Datei alle 15 Sekunden zu schleifen und sie zu beenden, wenn sie vorhanden ist. Ich würde jedoch viel lieber aufhören können, was es startet.

Gibt es Methoden für Windows 7, um zu verfolgen, wie ein Prozess gestartet wird?

user398246
quelle

Antworten:

9

Es gibt eine Sache namens PPID (Parent Process ID), aber es ist relativ "schwierig", sie in Windows zu finden, da es sich nicht um eine im Task-Manager angezeigte Spalte handelt und ich sie auch nicht einmal für Spalten im Process Explorer sehe.

Zwei Methoden, um dies zu tun

Method 1 - WMIC
Method 2 - Process Monitor

Beides sind ziemlich schnelle Methoden

Methode 1 - WMIC

Ich werde eine Antwort darauf verwenden, wie die PPID mithilfe von WMIC von hier aus gefunden wird: /programming/7486717/finding-parent-process-id-on-windows

Und das macht den Rest ziemlich einfach

C:\blah>wmic process get processid,parentprocessid
ParentProcessId  ProcessId
0                0
0                4
4                320
392              572
320              656
648              664
392              688
688              740
688              756
688              764
...              ...

Der Rest ist ziemlich offensichtlich.

Nehmen wir also an, Sie möchten herausfinden, wer calc.exe gestartet hat

und calc.exe, die Sie vom Task-Manager sehen, ist PID 7384

C:\blah>wmic process get processid,parentprocessid | find "7384"
10896            7384

PPID             PID


C:\crp>

WMIC zeigt die Assoziationen zwischen PID und PPID. Suchen Sie dann im Task-Manager nach 10896 (10896 ist die PPID, die für die PID von calc.exe von 7384 aufgeführt ist), und im Task-Manager sehe ich, dass der Prozess mit der PID von 10896 cmd.exe ist. Dies ist der Prozess, den ich zum Starten von calc verwendet habe. exe Und tatsächlich ist cmd.exe der übergeordnete Prozess, der calc.exe hervorgebracht hat

Methode 2 - Prozessüberwachung

Sie können dies im sysinternalen Prozessmonitor tun.

Klicken Sie in der Menüleiste auf filter..filter und fügen Sie einen Filter hinzu, der den Namen oder Pfad oder die PID des Prozesses filtert, z. B. den Prozessnamen calc.exe, oder einen Filter für den Pfad, und geben Sie c: \ windows \ system32 \ calc.exe ein

Ich habe zufällig den Prozessnamen verwendet

Geben Sie hier die Bildbeschreibung ein

Machen Sie OK .. und file..capture, wenn es noch nicht erfasst wurde.

Doppelklicken Sie auf den richtigen Prozess. Laden Sie in diesem Fall das Bild calc.exe und ein Eigenschaftendialogfeld wird angezeigt. Klicken Sie auf die richtige Registerkarte "Prozess", und Sie sehen die PID und PPID (übergeordnete Prozess-ID).

Geben Sie hier die Bildbeschreibung ein

Und wenn Sie die PPID wie jetzt kennen, können Sie sie natürlich im Task-Manager nachschlagen, um zu erfahren, aus welchem ​​Prozess sie hervorgegangen ist

Barlop
quelle
Ich würde bemerken, dass unter Linux PPID bekannter ist, der Befehl ps zeigt es an. In cygwin zeigt der Befehl ps keine nativen Windows-Prozesse an. Wenn ps es getan hätte, wäre es einfacher als wmic.
Barlop
@barlop Ich habe auch Process Monitor verwendet, um herauszufinden, was hin und wieder mit Notepad gestartet wurde. Aber es kommt nicht sehr oft vor und nicht bevor der Prozessmonitor so viele Ereignisse protokolliert hat, dass der RAM zu voll wurde. Gibt es eine Möglichkeit, automatisch zu löschen, was nicht zum Filter passt?
derz00
@ derz00 ist nicht die Idee eines Filters, der nicht anzeigt, was nicht zum Filter passt? Wenn zu viel angezeigt wird, funktioniert Ihr Filter möglicherweise nicht oder ist nicht dicht genug?
Barlop
Recht. Es wird nicht angezeigt, was nicht übereinstimmt. Es scheint jedoch, dass es immer noch geladen wird (im Hintergrund), da alle Ereignisse überwacht werden (obwohl nur angezeigt wird, was mit dem Filter übereinstimmt). Dies kann sich verständlicherweise schnell aufbauen (dauerte einige Stunden). Wenn dies das nächste Mal passiert, werde ich Ihre erste Methode verwenden, um den Elternteil zu finden. Das sollte mir helfen.
derz00
3

Wenn dies ein Prozess war, die im Hintergrund ausgeführt wurde, würde ich wahrscheinlich verwenden die Process Exploreroder wmicProzessansätze skizziert durch Barlopoder Robert Koritnik. Wenn der Prozess vorübergehend ist und sehr schnell gestartet / beendet wird und nicht genügend Zeit bleibt, um die erforderlichen Klicks und Tastenanschläge auszuführen, würde ich Process Monitor verwenden, wie von nixda beschrieben.

Ich bin etwas spät zu dieser Party, aber der Vollendung halber:

Eine andere Alternative dazu (wenn Sie aus irgendeinem Grund den Prozessmonitor nicht verwenden möchten) ist die Verwendung der integrierten Prozessverfolgung. Dies kann aktiviert werden, indem Sie zu:

Systemsteuerung -> Verwaltung -> Lokale Sicherheitsrichtlinie -> Lokale Richtlinien -> Überwachungsrichtlinie Wenn in Ihrer Systemsteuerung keine Verwaltung vorhanden ist, können Sie die lokale Sicherheitsrichtlinie auch öffnen, indem Sie auf die Schaltfläche Start klicken und secpol.msc eingeben .

Sie sollten verschiedene Überwachungsoptionen sehen, einschließlich der Überwachung des Prüfprozesses . Aktivieren Sie diese Option für die Kategorie Erfolg .

Geben Sie hier die Bildbeschreibung ein

In der Ereignisanzeige -> Windows-Protokolle -> Sicherheit sehen Sie nun ein Ereignis für die "Prozesserstellung" (das ist die Ereignis-ID 4688), den Namen / Pfad des zu erstellenden Prozesses und ein Feld mit dem Namen " Ersteller-Prozess-ID" . Diese enthält die hexadezimale Darstellung der PID des Prozesses, der diesen Prozess erstellt hat (Sie können dies einfach mit calc.exe in der Programmiereransicht konvertieren ).

Geben Sie hier die Bildbeschreibung ein

Sie können diese PID (die PID dieses 'Erstellungsprozesses', dh die PPID) entweder im Task-Manager oder in der Ausgabe von etwas wie tasklist / svc suchen .
Wenn der Prozess nicht mehr vorhanden ist, können Sie nach anderen Ereignissen mit der ID 4688 für diese andere PID suchen, ab dem Zeitpunkt ihrer Erstellung.

Adam Thompson
quelle
Die Lösungen, die ich erwähnte, waren eine mit WMIC und eine mit Process Monitor. Ich erwähnte kurz den Prozess-Explorer, gab aber keine Lösung dafür an.
barlop
-1

Nur wenige mögliche Vorschläge zum Ausprobieren (in zufälliger Reihenfolge), von denen einige möglicherweise keine realisierbaren Ergebnisse liefern oder die Sie bereits ausprobiert haben. Ich habe diese nicht selbst ausprobiert, daher biete ich nur Ideen an, die andere möglicherweise vermissen. Brainstorming ... Beachten Sie, dass die meisten meiner Vorschläge eher auf die Problemminderung abzielen, als sie an der Grundursache zu lösen. sie sind die so genannten verzweifelten Maßnahmen oder Plan Z .

1. Befehlszeileninformationen im Task-Manager

Haben Sie die Spalte Befehl im Task-Manager überprüft, ob sie diese Informationen enthält? Ich nehme an, Sie haben es bereits versucht.

2. Prozessinformationen im Prozess-Explorer

Wenn Command leer ist, würde ich Process Explorer von SysInternals ausprobieren und prüfen, ob ich weitere Informationen zu diesem bestimmten Prozess erhalte.

3. Unterbrechen eines Prozesses

Wenn Sie die Wurzel Ihres Problems nicht zu finden scheinen, können Sie versuchen, den Prozess anzuhalten, damit er immer noch vorhanden ist, aber nichts bewirkt. Sie können dies entweder mit dem Ressourcenmonitor tun
Prozess zur Unterbrechung des Ressourcenmonitors

oder SysInternals Process Explorer
Process Explorer Process Suspend

Ein unbekannter Prozess, der es startet, überprüft wahrscheinlich Prozesse (nach Namen) und wenn es sieht, dass es nicht da ist, startet es es. Wenn Sie es anhalten, ist es vorhanden, sodass dieser Initialisierungsprozess möglicherweise keine neue Instanz erzeugt.

Dies kann fehlschlagen, wenn der Initialisierungsprozess andere Mittel zur Prozesserkennung (Kommunikation zwischen Prozessen) verwendet. Diese Art der Prozesserkennung ist jedoch viel schwieriger zu entwickeln, sodass einfachere Optionen gewonnen werden können.

4. Benutzerdefiniertes Programm

Wir haben es hier möglicherweise mit zwei Prozessen zu tun. Erster , der die Existenz des zweiten Prozesses überprüft und ihn startet (den Sie töten). Wenn der zweite ausgeführt wird, wird möglicherweise die Befehlszeile angezeigt. Wenn Sie jedoch wissen, dass dies nicht dazu beiträgt, ihn nicht einmal zu starten, sind Sie möglicherweise eher hinter dem ersten Prozess her, der tatsächlich alles initiiert. Pech.

Da Sie jedoch mit Computern vertraut zu sein scheinen, können Sie den zweiten Prozess (sofern die Befehlszeile bekannt ist) durch Ihre eigene ausführbare Datei ersetzen, die nichts tut und nur dort sitzt. Es muss denselben Prozessnamen haben. Es könnte auch sofort von selbst starten und enden.

Wenn Sie wirklich gut in der Entwicklung von Betriebssystemen auf niedriger Ebene sind, können Sie einen zweiten Prozess schreiben, um zu überprüfen, wer ihn gestartet hat, wenn dies möglich ist. Ich bin nicht sicher, aber die Windows-API sollte solche Informationen bereitstellen. Dies würde Sie dann an die Wurzel Ihres Problems bringen.

5. Taskplaner

Es kann sein, dass Ihr Prozess nicht von anderen Prozessen erzeugt wird, sondern von einem definierten geplanten Aufgabenjob, der jede Minute ausgeführt wird. Ich bin mir nicht sicher, ob Sie das bereits überprüft haben, aber es kann der Fall sein.

6. Infektionsreinigung

Betrachtet man eine Virusinfektion? Versuchen Sie es zu erkennen und zu reinigen.

Robert Koritnik
quelle
-1 Ihre vorgeschlagene Methode 1 können Sie sofort ausprobieren und prüfen, ob PPID angezeigt wird oder nicht. Ich sehe es nicht und auch sonst antwortet niemand. Haben Sie es erneut mit Ihrer vorgeschlagenen Methode 2 versucht? Ich habe die Befehlszeile gesehen und nicht gesehen, die zeigt, welcher Prozess sie hervorgebracht hat. Sie sollten Ihre eigenen Methoden ausprobieren, andernfalls Kommentare abgeben und sagen, dass Sie sie nicht ausprobiert haben. Oder geben Sie in Ihrer Antwort an, dass Sie sie nicht ausprobiert haben.
Barlop
@barlop: Ich stimme dir zu. Meine Vorschläge sind keine Lösungen und die meisten zielen darauf ab, dieses Problem zu mildern, anstatt es zu lösen. Ich habe meine Antwort ein wenig bearbeitet, damit andere, die sie lesen, nicht so wütend werden wie Sie. ;) aber wenn es sich um eine Versöhnung handelt, hat OP keine Informationen darüber geliefert, wie dieser bestimmte Prozess abläuft. Meine Nr. 1 und Nr. 2 zielen eher auf Prozesse ab, die unter svchost ausgeführt werden, und in diesem Fall würden meine Nr. 1 und Nr. 2 gut funktionieren. FWIW ihr Prozess könnte auch gehostet werden.
Robert Koritnik
@RobertKoritnik - Sie müssen sich auf die Beantwortung der Frage konzentrieren. Nachdem Sie die Frage beantwortet haben, können Sie Ihre Antwort auf Schritte erweitern, um sie zu entschärfen. Denken Sie in Zukunft daran.
Ramhound