Taskkill.exe: не выдавайте ошибку, если процесс не запущен

33

Я запускаю событие пост-сборки Visual Studio, которое завершает работу IIS, если оно все еще выполняется после компиляции:

taskkill /f /im w3wp.exe

Следующее работает отлично, если IIS все еще работает, но выдает ошибку, если оно уже остановлено:

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

Есть ли способ заставить taskkill игнорировать проблему, если он не может найти подходящий запущенный процесс?

Luk
источник

Ответы:

29

Вместо выполнения одной команды будет работать небольшой командный файл?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
Мокубай
источник
22

Решение, которое я нашел для этого, было запустить

START /wait taskkill /f /im w3wp.exe

Он возвращает успех из команды START, и любая ошибка, выдаваемая TASKKILL, генерируется в новом окне консоли.

Дастин Гейстер
источник
5
и если вы хотите дождаться завершения задач, прежде чем продолжить работу с командным файлом. Просто добавьте:START /wait taskkill /f /im w3wp.exe
Jezternz
1
Ожидание - очень важная деталь. Я отредактирую это в исходном ответе, чтобы избежать путаницы. Спасибо @jezternz!
Дастин Гейстер
15

Это тоже хорошо работает:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Ричард Касавеккья
источник
Я не мог заставить это работать - моя версия taskkill, кажется, не распознает "STATUS eq RUNNING". Тем не менее, «MEMUSAGE GT 2» работает.
Polyfun
Я обнаружил, что «STATUS eq UNKNOWN» был лучшим вариантом для отлова процессов, которые могут или не могут зависнуть (но в любом случае, вы не хотите их)
Энди Кроуел
10

Или это просто вернет информационное сообщение, если не найдено:

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

Информация от: здесь

acarlon
источник
3

Это однострочное решение .

Он запустит taskkill, только если процесс действительно запущен, иначе он просто сообщит, что он не запущен.

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

Это вывод, если процесс запущен:

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

Это вывод в случае, если не работает:

process "w3wp.exe" not running.
nicovota
источник
0

Принудительно завершает процесс (если процесс запущен) и не выводит никакой информации.

Следующая команда работает нормально.

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

PandllCom
источник
Как это убьет w3wp.exe?
Джейсон Аллер