J'ai un fichier BAT qui tourne en arrière-plan sous Windows et dure environ dix minutes. Maintenant, je veux l'arrêter pendant son exécution, mais je ne trouve pas son nom dans la liste de processus du gestionnaire de tâches. Alors, comment puis-je aborder cela? Merci!
PDATE1
Il semble difficile d'arrêter un processus BAT en cours d'exécution dans le backgroud.Et je décide d'essayer de tuer tous les processus impliqués par le fichier BAT par son nom, ce qui peut être excessif. C'est acceptable pour moi, car la plupart des processus de mon fichier BAT ne sont pas utilisés fréquemment, tels que ping, tracert, netstat etc.Si vous avez une meilleure solution s'il vous plaît laissez-moi savoir. Merci.
PDATE2
Arbre de processus BAT
Les processus sont généralement lancés comme un arbre, je vous conseillerais de lancer Microsoft/Sysinternals Process Explorer , commencez par cliquer sur l'option Show Process Tree
(1), puis recherchez votre processus, puis cliquez avec le bouton droit de la souris et choisissez Kill Process Tree
(2). ) Cela devrait tuer à la fois le fichier d'origine et tout ce qu'il a lancé.
Vous pouvez modifier le fichier de commandes afin qu'il utilise un fichier de verrouillage pour continuer à fonctionner, en insérant des contrôles entre les commandes pour déterminer l'existence du fichier. Pour arrêter l'exécution du fichier de commandes, supprimez simplement le fichier de verrouillage.
Voici un fichier batch de démonstration:
echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto exit
pause
del "c:\temp\lockfile"
:exit
Pour tuer violemment les processus en cours d'exécution, vous pouvez créer un fichier batch 'kill' qui contiendra les commandes taskkill pour toutes les tâches éventuellement lancées à partir du fichier batch:
del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe
Une BAT commence généralement à lancer une instance de CMD.exe. En fonction de votre script, il lancera également d'autres processus.
J'ai écrit un app qui pourrait vous aider, du moins si la BAT est en cours d'exécution dans une fenêtre CMD. Vous pouvez afficher les fenêtres de l'application en cours d'exécution et obtenir le PID de l'application. Vous pouvez ensuite la tuer avec mon application, vous pouvez également voir tous les processus qu'elle a engendrés et les tuer également. C'est un programme vraiment simple, mais efficace pour ce genre de chose. Vous pouvez également l'utiliser pour localiser avec exactitude l'emplacement du fichier BAT, au cas où vous ne le sachiez pas déjà.
Comment le fichier batch est-il appelé?
S'il provient du planificateur de tâches, vous pouvez également l'arrêter à partir de là. S'il s'agit d'un service, vous pouvez alors arrêter le service.
Trouvé ce fil de discussion:
http://www.gamedev.net/community/forums/topic.asp?topic_id=261694
Il suggère d'utiliser ShellExecuteEx (ou CreateProcess) afin que vous puissiez obtenir un descripteur de processus, qui peut ensuite être utilisé pour tuer le processus.
Si vous l'avez ouvert dans l'invite de commande, vous pouvez appuyer sur Ctrl+C. Attendez quelques secondes et il sera terminé.