web-dev-qa-db-fra.com

Comment arrêter un processus automatiquement via un script batch

Comment puis-je vérifier si un processus est en cours d'exécution à partir d'un fichier batch/cmd? Et si le processus est en cours, comment puis-je arrêter le processus automatiquement?

Comme un script cmd, quelqu'un peut-il me donner des conseils ou m'aider à réaliser ce type de script?.

Exemple (pseudo code):

If calc.exe is running                        
Stop calc.exe

Je veux quelque chose comme ça:

@echo off

:x  
PATH=C:\Windows\System32\calc.exe  
If calc.exe is ON goto Process_Stop

:Process_Stop  
net stop calc.exe  
goto x
8
user2578034

Tout d'abord, vous avez la mauvaise commande pour arrêter un processus comme calc.exe. NET STOP arrêtera un service, mais pas un processus de programme normal. Vous voulez TASKKILL à la place.

Deuxièmement - Si vous savez que vous voulez tuer le processus s’il existe, pourquoi pensez-vous que vous devez vérifier s’il est en cours d’exécution avant de le tuer? Vous pouvez simplement essayer de tuer le processus, peu importe. S'il n'existe pas, une erreur est générée et aucun dommage ne sera causé. S'il existe, il est tué avec un message de réussite.

taskkill /im calc.exe

Si vous ne voulez pas voir le message d'erreur, redirigez stderr vers nul en utilisant 2>nul. Si vous ne voulez pas voir le message de réussite non plus, redirigez stdout vers nul en utilisant >nul.

taskkill /im calc.exe >nul 2>nul

Si vous souhaitez agir en fonction du résultat, vous pouvez utiliser les opérateurs conditionnels && et || pour la réussite et l'échec.

taskkill /im calc.exe >nul 2>nul && (
  echo calc.exe was killed
) || (
  echo no process was killed
)

Ou vous pouvez utiliser ERRORLEVEL pour déterminer quoi faire en fonction du résultat.

15
dbenham

Une commande plus lisible et plus simple ressemble à ceci:

taskkill/F/FI "IMAGENAME eq calc.exe"

Cette méthodologie ne renvoie jamais de code d'erreur si le processus n'est pas en cours d'exécution. Le commutateur/IMRETOURNERAsi le processus n'est pas en cours d'exécution. Vous pouvez également utiliser des jokers tels que:

taskkill/F/FI "IMAGENAME eq calc * .exe" pour supprimer tout processus commençant par 'calc' et se terminant par '.exe' dans le nom.

3
outbred

Commande Checklist tasklist - Cette commande vous donne une liste des tâches et des services en cours d'exécution. Vérifiez si la tâche qui vous intéresse est en cours d'exécution à l'aide d'une expression régulière

Ensuite, utilisez la commande taskkill pour tuer le service ou la tâche.

0
Anup