IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[BATCH] Comment tuer un process ?


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut [BATCH] Comment tuer un process ?
    Salut,

    Je cherche tout simplement la ligne de commande pour tuer un process (l'équivalent de la fonction kill sous Linux).

    Merci d'avance !

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    utilise PSKill

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Merci !
    En fait, j'avais fait précédemment un batch dans lequel je terminais un process sans passer par un exécutable. Il me semble que sous XP, il y a une commande qui existe pour cela. La connais-tu ?
    D'autre part, sais-tu s'il est possible de faire des tests sur des process (comme on le ferais avec des noms de fichiers) ?

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonf
    Il me semble que sous XP, il y a une commande qui existe pour cela. La connais-tu ?
    non, pas dans le distrib de base, étant donnée que MS en propose un dans le kit de ressources proposé en download.
    Citation Envoyé par tonf
    D'autre part, sais-tu s'il est possible de faire des tests sur des process (comme on le ferais avec des noms de fichiers) ?
    Avec une boucle For /F cela me semble possible

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Avec la boucle, je ne vois pas trop comment faire. Le but étant de traduire l'instruction suivante : si le process existe alors le tuer.
    A ce que j'ai compris dans l'aide de la console sur la commande For, on peut remplacer le nom de fichier entre guillemets par des quotes inversées.
    La ligne de commande serait donc la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /F %%i in (`mon_programme.exe`) do pskill %%i
    Ceci n'a pour résultat que de me lancer une deuxième tâche mon_programme.exe.

    Une idée ?

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonf
    Une idée ?
    Une petite alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    @echo off
     rem Supprime un ou + process.
     rem Outils dispo sur :http://www.sysinternals.com/ntw2k/freeware/pstools.shtml
    Start /min Notepad
    Start /min Notepad
    Set process=Notepad
    
     rem Récupére les lignes, excepté les 8 premières, contenant le nom du process contenu dans la varaible d'environnement.
     rem Le token 2 contient le PID
     Rem Si le PID n'est pas renseigné aucun process de ce nom n'a été trouvé,
     rem dans ce cas on ne fait rien sinon on détruit le process.
    for /F "Tokens=1,2 skip=8" %%O in ('Pslist -e %Process%') do if not %%P'==' Call ::KILL %%P
    Goto End
    
    :KILL
    rem Supprime un process
    PSKill -t %1
    goto :eof
    
    :End
    Tu peux faire plus simple mais ici on supprime toutes les instances des process de même nom.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Merci, ça marche nickel !

    Mais je ne comprends pas bien l'histoire du "skip=8". PSList ne retourne qu'une ligne. D'ailleurs le même batch sans cette instruction fonctionne aussi.
    Peux-tu m'expliquer ?

    Merci d'avance pour l'explication !

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonf
    Mais je ne comprends pas bien l'histoire du "skip=8". PSList ne retourne qu'une ligne.
    Pslist [Entrée] renvoi ceci :
    1
    2 PsList 1.26 - Process Information Lister
    3 Copyright (C) 1999-2004 Mark Russinovich
    4 Sysinternals - www.sysinternals.com
    5
    6 Process information for AMD2800:
    7
    8 Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time
    notepad ....
    Je considére les 8 première lignes comme des lignes 'parasite' et surtout sans structure.
    Aprés la 8 ième ligne, les lignes sont structurées; On peut donc les parser avec la boucle For /F.
    Le premier token contient le nom, le second le PID et ils sont délimités par des espaces ( paramètre delims par défaut).

    Donc sans le skip=8 tu obtiens des message d'erreur avec psKill car le parsing se fait sur des lignes qui ne portent pas d'information exploitable (PID).

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Tout est clair, merci !
    Je ne pensais pas que les lignes d'en-tête de PSList étaient prises en compte, d'où mon incompréhension...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment tuer un sous-process créé avec un pipe
    Par jack-ft dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 05/04/2011, 09h45
  2. Comment tuer les processus dans l'état sleeping sans EM ?
    Par David Guillouet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/02/2005, 09h42
  3. [Kill]tuer un process
    Par parisjohn dans le forum C
    Réponses: 9
    Dernier message: 27/08/2004, 14h26
  4. Comment tuer une frame
    Par tymous dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 28/07/2004, 11h53
  5. Comment tuer le processus ez-ipupdate
    Par berry dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 21/06/2004, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo