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.