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.