Findet alle Kind-Prozesse von meinen eigenen .NET-Prozess / finden Sie heraus, ob ein Prozess ist ein Kind von meinem eigenen?
Habe ich eine .NET-Klassenbibliothek, die spinnt ein sekundärer Prozess, der in Gang gehalten, bis ich entsorgen des Objekts.
Aufgrund von einigen stellen des Programms noch in Erinnerung habe, habe ich beschlossen, fügen Sie ein integration-test, um sicherzustellen, dass, wenn ich ließ das Objekt verfallen zu GC/Fertigstellung dieser Prozess wird heruntergefahren.
Jedoch, da der Prozess der Mercurial Kommandozeilen-client, und mein build-server wird bereits ausgeführt "Mercurial" als Teil seiner eigenen Operationen, Stell ich Situationen, in denen Mercurial ist entweder bereits ausgeführt wird, wenn test beginnt, oder, dass er gestartet wurde und noch läuft, wenn der test abgeschlossen ist, in Bezug auf die build-server, und nicht mein test.
So, ich möchte sicherstellen, dass die Mercurial-client finde ich (oder nicht), die ich begonnen, und nicht nur alle - client, der derzeit ausgeführt wird.
Die Frage ist also:
- Wie kann ich herausfinden, ob die Mercurial-client, ich bin auf der Suche wurde von meinem Prozess?
Durch "Suche", ich war auf der Suche mit der Prozess.GetProcesses Methode, aber dies ist keine Voraussetzung.
Wenn eine andere Frage ist besser, "so finden Sie alle Kind-Prozesse von meinen eigenen Prozess", dh. einfacher zu beantworten, dass man mehr als genug, wie gut.
Fand ich diese Seite: Wie kann ich wissen, dass der übergeordnete Prozess-ID eines Prozesses?, aber es scheint, dass ich haben, um ihm den Namen des Prozesses. Wenn ich nur gebe es "hg" ist das nicht, die Frage zu unklar für den Fall, ich bin auf der Suche nach?
Du musst angemeldet sein, um einen Kommentar abzugeben.
wie es passiert, ich habe ein bisschen C#/WMI-code rumliegen, der killt alle Prozesse hervorgebracht, die von einem bestimmten Prozess-id rekursiv. die Tötung ist offensichtlich nicht das, was Sie wollen, aber das finden der Kind-Prozesse zu sein scheint, was Sie interessiert sind in. Ich hoffe, das ist hilfreich:
Obwohl die Antwort von mtijn ist wahrscheinlich die nächstgelegene Sie bekommen können, die richtige Antwort ist: das können Sie nicht.
Windows nicht halten eine echte Prozess-Baum, wo die Prozesse neu strukturiert, wenn ein Prozess auf einem mittleren Niveau, stirbt. Windows jedoch erinnern die parent-Prozess-ID.
Den problematischen Fall ist der folgende:
Original-Prozess-Struktur:
Wenn jetzt SubApp.exe beendet wird, werden die parent-Prozess-ID Second.exe wird Sie nicht aktualisiert. Das neue Ergebnis ist
Überprüfen kann man das mit SysInternals Process Explorer. Es ist in der Lage zu zeigen, die Prozesse als Baum. Starten Sie CMD und geben Sie dann
start cmd
. In dem neuen Fenster geben Siestart cmd
wieder. Sie haben 3 Fenster offen. Jetzt kündigen die Mitte ein.