Unser Kunde hat einige Windows 2003-Server, auf denen Stapeljobs ausgeführt werden, die vom Taskplaner aktiviert wurden. Die eigentlichen Programme, die die Arbeit ausführen, sind benutzerdefinierte EXE-Prozesse und werden zu CMD-Skripten zusammengefasst, sodass sie vom Taskplaner zusammen gestartet werden, wenn das geplante Intervall verstrichen ist. Die Zeilen in den cmd-Skripten verwenden möglicherweise den Befehl Call, um die separaten EXE-Programme zu starten.
In diesem Setup überwacht der Taskplaner cmd.exe effektiv. Wenn Sie den Prozess-Explorer verwenden, können Sie feststellen, dass die untergeordneten EXE-Prozesse unter dem Prozessbaum cmd.exe geparkt sind. Wenn der Taskplaner jedoch cmd.exe aufgrund eines Überschreitens des zulässigen Zeitlimits beendet, werden die untergeordneten .exe-Prozesse möglicherweise nicht zusammen mit dem übergeordneten Prozess beendet und verwaist. Diese Prozesse bleiben auf unbestimmte Zeit blockiert. Aufgrund des Status der im Prozess-Explorer angezeigten Prozessthreads vermute ich, dass diese Prozesse fehlerhaft sind und ein .NET-Debugger-Dialogfeld (dies sind .NET-Anwendungen) angezeigt wird, das nicht angezeigt wird, da der Stapeljobbenutzer ein separater Benutzer ist Konto.
Als ich dieses Verhalten auf meiner Windows XP-Workstation untersuchte, stellte ich zunächst fest, dass untergeordnete .exe-Prozesse, die über mein .cmd-Testskript gestartet werden, zusammen mit cmd.exe beendet werden, wenn der Taskplaner feststellt, dass die Zeit abgelaufen ist. Ich konnte die untergeordneten Prozesse auf keinen Fall verwaisen.
Aufgrund einer Vermutung wechselte ich schließlich zu einem Windows 2003-Computer, um dies zu testen. Ebenso werden die untergeordneten Prozesse so beendet, dass sie wie auf meiner Workstation beendet werden. Mein zweiter Schritt war dann, ein anderes Benutzerkonto zu verwenden, um die geplante Aufgabe auszuführen. Dieses Mal wird cmd.exe beendet, nachdem das Zeitlimit überschritten wurde, aber die untergeordneten Prozesse bleiben bestehen, genau wie es mein Kunde auf seinen Produktionsservern beobachtet hat.
Wenn ich dieses Batch-Benutzerkonto (das zufällig ein anderes Administratorkonto war) präventiv anmelde, um eine Desktopsitzung zu beanspruchen, werden alle Fehler- oder Info-Popups aus meinen Test-EXE-Programmen weitergeleitet und auf diesem Desktop gerendert, sodass ich dies tun kann Siehe die tatsächliche Benutzerausgabe. Wenn ich mich erst anmelde, nachdem die geplante Aufgabe aufgerufen wurde, "fordert" die Desktopsitzung die Fenster der vorhandenen Prozesse nicht zurück. Sie bleiben für immer verborgen.
Meine Frage ist, welche Bedingung (en) fehlen mir hier, die dazu führen können, dass der Taskplaner die untergeordneten Prozesse unter einer cmd.exe nicht löscht? Was ist das Besondere an der Verwendung eines anderen Kontos, das dieses Verhalten hervorrufen würde, jedoch nicht, wenn mein aktuelles Administratorkonto zum Ausführen der geplanten Aufgabe verwendet wird?