Taskkill.exe: nie rzucaj błędu, jeśli proces nie jest uruchomiony

33

Korzystam ze zdarzenia kompilacji po Visual Studio, które wyłącza IIS, jeśli nadal działa po kompilacji:

taskkill /f /im w3wp.exe

Poniższe działa doskonale, jeśli IIS nadal działa, ale zgłasza błąd, jeśli już się zatrzymał:

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

Czy istnieje sposób, aby powiedzieć Taskkill, aby zignorował problem, jeśli nie może znaleźć pasującego uruchomionego procesu?

Luk
źródło

Odpowiedzi:

29

Czy zamiast uruchamiania jednej komendy działałby mały plik wsadowy?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
Mokubai
źródło
22

Rozwiązaniem, które znalazłem, było uruchomienie

START /wait taskkill /f /im w3wp.exe

Zwraca sukces z polecenia START, a każdy błąd zgłoszony przez TASKKILL jest zgłaszany w nowym oknie konsoli

Dustin Gamester
źródło
5
i jeśli chcesz poczekać na zabicie zadań, zanim przejdziesz do pliku wsadowego. wystarczy dodać:START /wait taskkill /f /im w3wp.exe
jezternz
1
Oczekiwanie jest bardzo ważnym szczegółem. Przeredaguję to w oryginalnej odpowiedzi, aby uniknąć nieporozumień. Dzięki @jezternz!
Dustin Gamester
15

Działa to również dobrze:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
źródło
Nie mogłem tego uruchomić - moja wersja zadania nie wydaje się rozpoznawać „STATUS eq RUNNING”. Jednak „MEMUSAGE gt 2” działa.
Polyfun,
Odkryłem, że „STATUS eq UNKNOWN” to lepsza opcja do wychwytywania procesów, które mogą zostać zablokowane (ale w każdym razie nie chcesz ich)
Andy Krouwel,
10

Lub zwróci to wiadomość informacyjną, jeśli nie zostanie znaleziona:

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

Informacje z: tutaj

acarlon
źródło
3

Jest to rozwiązanie jednoliniowe .

Będzie uruchamiał zadanie tylko wtedy, gdy proces naprawdę działa, w przeciwnym razie będzie po prostu informował, że nie jest uruchomiony.

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

To jest wynik w przypadku, gdy proces był uruchomiony:

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

To jest wyjście, jeśli nie działa:

process "w3wp.exe" not running.
nicovota
źródło
0

Zmusza proces do zabicia (jeśli proces jest uruchomiony) i nie wyświetla żadnych informacji.

Następujące polecenie działa dobrze.

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

PandllCom
źródło
Jak to zabije w3wp.exe?
Jason Aller