Em vez de executar um comando, o trabalho de um pequeno arquivo em lotes seria executado?
tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
Estou executando um evento de compilação post do Visual Studio que desliga o IIS se ainda estiver sendo executado após a compilação:
taskkill /f /im w3wp.exe
O seguinte funciona perfeitamente se o IIS ainda estiver em execução, mas gera um erro se já tiver parado:
Error 1 The process "w3wp.exe" not found. xxx\EXEC
Existe uma maneira de dizer ao taskkill para ignorar o problema se ele não encontrar um processo de execução correspondente?
A solução que encontrei para isso foi rodar
START taskkill /f /im w3wp.exe
Ele retorna um sucesso do comando START, e qualquer erro lançado pelo TASKKILL é lançado na nova janela do console
Isso também funciona bem:
taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Ou, isso retornará uma mensagem informativa, caso não seja encontrada:
taskkill /f /im w3wp.exe /fi "memusage gt 2"
Informações de: aqui
Esta é uma solução de uma linha .
Ele executará taskkill apenas se o processo estiver realmente em execução, caso contrário, será apenas uma informação de que ele não está sendo executado.
tasklist | find /i "w3wp.exe" && taskkill /im w3wp.exe /F || echo process "w3wp.exe" not running.
Esta é a saída caso o processo esteja em execução:
w3wp.exe 1960 Services 0 112,260 K
SUCCESS: The process "w3wp.exe" with PID 1960 has been terminated.
Esta é a saída no caso de não estar em execução:
process "w3wp.exe" not running.
Força o processo a ser eliminado (se o processo estiver sendo executado) e não gera nenhuma informação.
O seguinte comando funciona bem.
taskkill /f /im w3wp.exe /t /fi "status eq running">nul