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.