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?

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

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


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"

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


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.

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


Jak to zabije w3wp.exe?
— Jason Aller
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.