Taskkill.exe: não gere um erro se o processo não estiver sendo executado

33

Estou executando um evento de pós-compilação do Visual Studio que desliga o IIS se ele ainda estiver em execução 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 conseguir encontrar um processo em execução correspondente?

Luk
fonte

Respostas:

29

Em vez de executar um comando, a execução de um pequeno arquivo em lotes funcionaria?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe
Mokubai
fonte
22

A solução que encontrei para isso foi executar

START /wait taskkill /f /im w3wp.exe

Ele retorna com êxito o comando START e qualquer erro gerado pelo TASKKILL é gerado na nova janela do console

Dustin Gamester
fonte
5
e se você desejar aguardar a eliminação das tarefas antes de continuar com o arquivo em lotes. basta adicionar:START /wait taskkill /f /im w3wp.exe
jezternz
11
A espera é um detalhe muito importante. Vou editar isso na resposta original para evitar confusão. Obrigado @jezternz!
Dustin Gamester
15

Isso funciona bem também:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
fonte
Não consegui fazer isso funcionar - minha versão do taskkill parece não reconhecer "STATUS eq RUNNING". No entanto, "MEMUSAGE gt 2" funciona.
precisa saber é
Descobri que "STATUS eq DESCONHECIDO" era uma opção melhor para processos que podem ou não pode ser preso captura (mas de qualquer forma, você não quer que eles)
Andy Krouwel
10

Ou, isso retornará apenas uma mensagem informativa se não for encontrada:

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

Informações de: aqui

acarlon
fonte
3

Esta é uma solução de uma linha .

Ele executará o taskkill apenas se o processo estiver realmente em execução, caso contrário, apenas informará que não está em execução.

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

Esta é a saída no caso de o processo estar 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 caso não esteja em execução:

process "w3wp.exe" not running.
nicovota
fonte
0

Força o processo a ser eliminado (se o processo estiver em execução) e não gera nenhuma informação.

O comando a seguir funciona bem.

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

PandllCom
fonte
Como isso matará o w3wp.exe?
21818 Jason Aller