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?

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

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


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"

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


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.

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


Wie wird dies w3wp.exe töten?
Jason Aller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.