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?

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

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


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"

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


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.

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


Comment cela va-t-il tuer w3wp.exe?
Jason Aller
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.