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?

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

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


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"

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


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.

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


Como isso matará o w3wp.exe?
— 21818 Jason Aller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.