Taskkill.exe: Wirf keinen Fehler, wenn der Prozess nicht läuft

33

Ich führe ein Visual Studio-Postbuild-Ereignis aus, das IIS herunterfährt, wenn es nach der Kompilierung noch ausgeführt wird:

taskkill /f /im w3wp.exe

Das Folgende funktioniert einwandfrei, wenn IIS noch ausgeführt wird, löst jedoch einen Fehler aus, wenn es bereits beendet wurde:

Error 1 The process "w3wp.exe" not found. xxx\EXEC

Gibt es eine Möglichkeit, taskkill anzuweisen, das Problem zu ignorieren, wenn kein passender laufender Prozess gefunden wird?

Luk
quelle

Antworten:

29

Würde das Ausführen einer kleinen Batchdatei statt eines einzigen Befehls funktionieren?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
Mokubai
quelle
22

Die Lösung, die ich dafür fand, war zu laufen

START /wait taskkill /f /im w3wp.exe

Der Befehl START gibt einen Erfolg zurück, und jeder von TASKKILL ausgegebene Fehler wird im neuen Konsolenfenster ausgegeben

Dustin Gamester
quelle
5
und wenn Sie warten möchten, bis die Aufgaben beendet sind, bevor Sie mit der Batch-Datei fortfahren. START /wait taskkill /f /im w3wp.exe
Füge
1
Das Warten ist ein sehr wichtiges Detail. Ich werde das in die ursprüngliche Antwort ändern, um Verwirrung zu vermeiden. Danke @jezternz!
Dustin Gamester
15

Das funktioniert auch gut:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
quelle
Ich konnte das nicht zum Laufen bringen - meine Version von taskkill scheint "STATUS eq RUNNING" nicht zu erkennen. "MEMUSAGE gt 2" funktioniert jedoch.
Polyfun
Ich fand, dass "STATUS eq UNKNOWN" eine bessere Option zum Abfangen von Prozessen war, die möglicherweise
hängen
10

Oder dies wird nur eine Info-Nachricht zurückgeben, wenn nicht gefunden:

taskkill /f /im w3wp.exe /fi "memusage gt 2"

Info von: hier

Acarlon
quelle
3

Dies ist eine einzeilige Lösung .

Taskkill wird nur ausgeführt, wenn der Prozess wirklich ausgeführt wird, andernfalls wird nur die Information angezeigt, dass er nicht ausgeführt wird.

tasklist | find /i "w3wp.exe" && taskkill /im w3wp.exe /F || echo process "w3wp.exe" not running.

Dies ist die Ausgabe, falls der Prozess ausgeführt wurde:

w3wp.exe           1960 Services                   0    112,260 K
SUCCESS: The process "w3wp.exe" with PID 1960 has been terminated.

Dies ist die Ausgabe für den Fall, dass sie nicht ausgeführt wird:

process "w3wp.exe" not running.
nicovota
quelle
0

Zwingt den Prozess zum Abbruch (wenn der Prozess ausgeführt wird) und gibt keine Informationen aus.

Der folgende Befehl funktioniert einwandfrei.

taskkill /f /im w3wp.exe /t /fi "status eq running">nul

PandllCom
quelle
Wie wird dies w3wp.exe töten?
Jason Aller