Frage

Ich habe eine C#-Anwendung, die einige Kinderprozesse startet und ihren Standart-Input und ihre Ausgabe umleiten.

Wenn ich die Anwendung auf die normale Art und Weise schließe, werden alle Kinderprozesse zerstört, aber wenn die Anwendung vom Task-Manager oder einer anderen Möglichkeit getötet wird, kann ich die Kinderprozesse nicht schließen.

Sie existieren und brauchen viel CPU-Strom (fast 99%). Ich denke, sie brauchen so viel Strom, weil ihr "umgeleiteter" Standart-Output nicht gelesen wird?

Gibt es eine Möglichkeit, die Kinderprozesse immer zu schließen? Oder um ihre CPU-Zeit nach dem Töten des Elternprozesses zu verringern?

Danke und beste Grüße

Kevin Meier

War es hilfreich?

Lösung

Die kurze Antwort lautet nein!

Wenn Benutzer Ihren Bewerbungsprozess beendet, wird er nur beendet. Sie können nichts dagegen tun, es sei denn, Sie haben den Quellcode für untergeordnete Prozesse und ändern sie so, dass sie nach der Beendigung der Eltern enden oder einen individuellen Beobachterprozess verwenden, um untergeordnete Prozesse Ihrer Anwendung zu beenden, wenn sie beendet wird.

Andere Tipps

Die Umleitung der Ströme sollte nicht durch sich selbst hohe CPU -Verwendung verursachen, etwas anderes passiert wahrscheinlich.

Wenn ich dieses Problem hätte, würde ich in allen untergeordneten Prozessen manchmal über den laufenden übergeordneten Proccess überprüfen, wenn der Elternprozess nicht vorhanden ist.

Wenn Sie garantieren möchten, dass Kinderprozesse enden, wenn der Elternteil beendet wird, können Sie verwenden Jobobjekte. Leider gibt es keine einfache Möglichkeit, dies aus Managed Code zu tun. Es würde eine Menge P/Invoke -Interop -Anrufe an Win32 -APIs erfordern wie CreateJobObject, Ordnungsprozessojobobject, usw. Aber im Allgemeinen sollte es möglich sein.

Sie können benannte Pipe usw. verwenden, um zwischen übergeordneten und untergeordneten Prozessen zu kommunizieren. Überprüfen Sie weiter, ob der Elternteil da ist oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top