Taskkill.exe: no arroje un error si el proceso no se está ejecutando

33

Estoy ejecutando un evento posterior a la compilación de Visual Studio que cierra IIS si aún se está ejecutando después de la compilación:

taskkill /f /im w3wp.exe

Lo siguiente funciona perfectamente si IIS todavía se está ejecutando, pero arroja un error si ya se detuvo:

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

¿Hay alguna manera de decirle a Taskkill que ignore el problema si no puede encontrar un proceso de ejecución coincidente?

Luk
fuente

Respuestas:

29

En lugar de ejecutar un comando, ¿funcionaría en su lugar ejecutar un pequeño archivo por lotes?

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

La solución que encontré para esto fue ejecutar

START /wait taskkill /f /im w3wp.exe

Devuelve un éxito del comando START, y cualquier error arrojado por TASKKILL se arroja en la nueva ventana de la consola

Dustin Gamester
fuente
55
y si desea esperar a que se eliminen las tareas antes de continuar con el archivo por lotes. simplemente agregue:START /wait taskkill /f /im w3wp.exe
jezternz
1
La espera es un detalle muy importante. Lo editaré en la respuesta original para evitar confusiones. Gracias @jezternz!
Dustin Gamester
15

Esto también funciona bien:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
fuente
No pude hacer que esto funcionara: mi versión de taskkill no parece reconocer "STATUS eq RUNNING". Sin embargo, "MEMUSAGE gt 2" funciona.
Polyfun
Descubrí que "ESTADO eq DESCONOCIDO" era una mejor opción para detectar procesos que pueden estar atascados o no (pero de cualquier manera, no los quieres)
Andy Krouwel
10

O bien, esto solo devolverá un mensaje de información si no se encuentra:

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

Información de: aquí

acarlon
fuente
3

Esta es una solución de una línea .

Ejecutará taskkill solo si el proceso realmente se está ejecutando; de lo contrario, solo informará que no se está ejecutando.

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

Este es el resultado en caso de que el proceso se esté ejecutando:

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

Este es el resultado en caso de que no se ejecute:

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

Obliga al proceso a matar (si el proceso se está ejecutando) y no genera ninguna información.

El siguiente comando funciona bien.

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

PandllCom
fuente
¿Cómo matará esto a w3wp.exe?
Jason Aller