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.