Taskkill.exe: ne lancez pas d'erreur si le processus n'est pas en cours d'exécution

33

J'exécute un événement de post-construction de Visual Studio qui arrête IIS s'il est toujours en cours d'exécution après la compilation:

taskkill /f /im w3wp.exe

Ce qui suit fonctionne parfaitement si IIS est toujours en cours d'exécution, mais génère une erreur s'il s'est déjà arrêté:

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

Existe-t-il un moyen de dire à taskkill d'ignorer le problème s'il ne trouve pas de processus en cours d'exécution correspondant?

Luk
la source

Réponses:

29

Au lieu d'exécuter une commande, l'exécution d'un petit fichier de commandes fonctionnerait-elle à la place?

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

La solution que j'ai trouvée était d'exécuter

START /wait taskkill /f /im w3wp.exe

Il renvoie un succès de la commande START et toute erreur levée par TASKKILL est levée dans la nouvelle fenêtre de console

Dustin Gamester
la source
5
et si vous souhaitez attendre la fin des tâches avant de continuer avec le fichier de commandes. ajoutez simplement:START /wait taskkill /f /im w3wp.exe
jezternz
1
L'attente est un détail très important. Je vais modifier cela dans la réponse d'origine pour éviter toute confusion. Merci @jezternz!
Dustin Gamester
15

Cela fonctionne bien aussi:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
la source
Je n'ai pas pu faire fonctionner cela - ma version de taskkill ne semble pas reconnaître "STATUS eq RUNNING". Cependant, "MEMUSAGE gt 2" fonctionne.
Polyfun
J'ai trouvé que "STATUS eq UNKNOWN" était une meilleure option pour intercepter les processus qui peuvent ou non être bloqués (mais de toute façon, vous ne les voulez pas)
Andy Krouwel
10

Ou, cela retournera simplement un message d'information s'il n'est pas trouvé:

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

Infos de: ici

acarlon
la source
3

Il s'agit d'une solution en une seule ligne .

Il exécutera taskkill uniquement si le processus est réellement en cours d'exécution, sinon il indiquera simplement qu'il n'est pas en cours d'exécution.

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

C'est la sortie au cas où le processus était en cours d'exécution:

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

C'est la sortie en cas de non fonctionnement:

process "w3wp.exe" not running.
nicovota
la source
0

Force le processus à tuer (si le processus est en cours d'exécution) et ne génère aucune information.

La commande suivante fonctionne correctement.

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

PandllCom
la source
Comment cela va-t-il tuer w3wp.exe?
Jason Aller