Wie stoppe ich einen Fledermausprozess unter Windows?

11

Ich habe BAT-Datei im Hintergrund unter Windows ausgeführt, die etwa zehn Minuten dauert. Jetzt möchte ich es stoppen, während es ausgeführt wird, aber ich kann seinen Namen nicht in der Prozessliste im Task-Manager finden. Wie kann ich das angehen? Vielen Dank!

UPDATE1

Es scheint schwierig zu sein, einen laufenden BAT-Prozess im Hintergrund zu stoppen. Und ich entscheide mich, jeden Prozess, der an der BAT-Datei beteiligt ist, nach Namen zu beenden, was möglicherweise übertrieben ist. Dies ist für mich akzeptabel, da die meisten Prozesse in meiner BAT-Datei nicht häufig verwendet werden. wie Ping, Tracert, Netstat usw. Wenn Sie eine bessere Lösung haben, lassen Sie es mich bitte wissen. Danke.

UPDATE2

BAT-Prozessbaum

Alt-Text

SpawnST
quelle
1
Wie haben Sie die Bat-Datei im Hintergrund ausgeführt? Sie sagen, Sie können nicht Strg-C machen. Ich würde break = on versuchen, wenn das nicht funktioniert, aber du sagst, du kannst Strg-C nicht machen, weil es "im Hintergrund" ist. Vielleicht ist es bereits gelaufen und fertig, und Sie müssen nur töten, was es hervorgebracht hat.
Barlop
2
@ barlop, es kann im Hintergrund mit ShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);in VC ++ ausgeführt werden.
SpawnST

Antworten:

11

Prozesse werden normalerweise in einer Baumstruktur gestartet. Ich würde empfehlen, Microsoft / Sysinternals Process Explorer zu starten. Klicken Sie zunächst auf die Show Process TreeOption (1), suchen Sie Ihren Prozess und klicken Sie mit der rechten Maustaste und wählen Sie Kill Process Tree(2). Dies sollte sowohl die Originaldatei als auch löschen alles, was es gestartet hat.

Alt-Text

William Hilsum
quelle
Das Töten des Prozessbaums scheint ein wenig hartnäckig zu sein. Es kann ausreichend sein, den übergeordneten Prozess (den Befehl bat) abzubrechen.
wag2639
1
@ wag2639, nachdem ich die Frage gelesen hatte, dachte ich, er möchte die BVT beenden und Prozesse erzeugen? Wenn gesagt wird, dass die Verarbeitung so lange dauert, verstehe ich, dass beim Starten von Prozessen nichts passiert, bis sie eine Antwort schreiben ... Wenn der Baum nicht beendet wird, gibt es nur eine Reihe laufender Prozesse nichts tun.
William Hilsum
Ich habe es auf diese Weise versucht und das Bild in meine Antwort eingefügt. Danke. Und jetzt finde ich einen Befehl, der einen von der BAT-Datei und ihren untergeordneten Elementen taskkill /F /T /IM cmd.exegestarteten cmd.exeProzess beenden kann. Das einzige Problem ist, dass jede BAT-Datei einen Prozess mit einer anderen PID startet Ich muss herausfinden, welches mein Ziel ist.
SpawnST
@SpawnST, welcher Prozess startet die BAT-Datei? Sie müssen den Gegenstand, der ihn startet, dann töten, wenn mehrere Kopien vorhanden sind.
William Hilsum
@ Wil, es wird von einem MFC / Dialog-Prozess gestartet. Der Dialog führt die BAT-Datei mit der Fenster-Shell nur aus, wenn sie initialisiert wird. Jetzt versuche ich sicherzustellen, dass der BAT-Prozess vollständig beendet wird, wenn der Dialog beendet wird.
SpawnST
5

Sie können die Batchdatei so ändern, dass sie eine Sperrdatei verwendet, um den Betrieb fortzusetzen, indem Sie zwischen Befehlen Überprüfungen auf das Vorhandensein der Datei einfügen. Um die Ausführung der Batch-Datei zu stoppen, löschen Sie einfach die Sperrdatei.

Hier ist eine Demo-Batch-Datei:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

Um die Prozesse, die derzeit ausgeführt werden, gewaltsam zu beenden , können Sie eine Batch-Datei "kill" erstellen, die Taskkill- Befehle für alle Aufgaben enthält, die möglicherweise über die Batch-Datei gestartet werden:

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe
harrymc
quelle
Das ist eine gute Idee. Aber ich denke, es kann Probleme für meine App verursachen, wenn ein Befehl tracertzum Beispiel für eine lange Zeit ausgeführt wird .
SpawnST
Ja, das ist es, was ich jetzt mache, wirklich gewalttätig :-) Und vielleicht ist die Sperrdatei in dieser Lösung nicht notwendig.
SpawnST
Dies ist erforderlich, damit die Batchdatei die nächste Aufgabe nicht ausführt, wenn die aktuelle beendet wird. Andernfalls könnte Task1 beendet und Task2 gestartet werden, nachdem der Taskkill bereits ausgeführt wurde, sodass der Kill-Batch einfach Task2 verpasst.
Harrymc
1

Ein BAT startet normalerweise nur eine Instanz von CMD.exe. Abhängig davon, was Ihr Skript tut, werden auch andere Prozesse gestartet.

vcsjones
quelle
Gibt es also eine Möglichkeit, die es verhindern kann, andere Prozesse zu starten?
SpawnST
1
@SpawnST: Wenn das CMD-Fenster sichtbar ist, können Sie nicht einfach STRG + C eingeben?
Paradroid
@ jason404, wie ich in der Frage erwähnt habe, läuft es im Hintergrund.
SpawnST
1

Ich habe eine App geschrieben , die Ihnen helfen könnte, zumindest wenn die BVT in einem CMD-Fenster ausgeführt wird. Sie können die laufenden Anwendungsfenster anzeigen und die PID der App abrufen. Sie können sie dann mit meiner App beenden. Sie können auch alle Prozesse anzeigen, die sie erzeugt hat, und sie auch beenden. Es ist ein wirklich einfaches Programm, aber effektiv für solche Dinge. Sie können es auch verwenden, um genau zu ermitteln, wo auf Ihrer Festplatte die BAT-Datei ausgeführt wird, falls Sie das noch nicht wussten.

MaQleod
quelle
Ich mache diese Arbeit mit VC ++ / MFC und ich denke, ich brauche einige Windows-Befehle, um sie zu erledigen. Danke für die Antwort.
SpawnST
1

Wie wird die Batchdatei aufgerufen?
Wenn es vom Taskplaner stammt, können Sie es auch von dort aus stoppen. Wenn es sich um einen Dienst handelt, können Sie den Dienst beenden.

weismat
quelle
0

Wenn Sie es in der Eingabeaufforderung geöffnet haben, können Sie Ctrl+ drücken C. Warten Sie einige Sekunden und es wird beendet.

Harvey Hopkins
quelle