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

Scripts/Batch Discussion :

Fermer une tâche si elle n'a pas terminé après "x" secondes. [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Fermer une tâche si elle n'a pas terminé après "x" secondes.
    Bonjour,

    Alors je lance un '.exe' sans soucis depuis un fichier de commande qui effectue une simulation.

    Le problème c'est qu'en fonction des informations données au simulateur, il termine la simulation en quelques secondes voir moins ou traine parfois plusieurs dizaines de secondes.

    Je souhaiterais que le batch se termine directement si le simulateur termine son job avant 5 secondes par exemple.

    Pour le moment, j'arrive soit à avoir le simulateur tourner librement et tout se ferme une fois qu'il a terminé OU que tout se ferme après 5 secondes, simulation terminée en 0.5 sec ou encore en train de tourner:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :: Simulation 
     
    	cd ..\Simulations
     
           start /b H1D_CALC<return.txt
           ping 127.0.0.1 -n 5 || ping::1 -n 5 > nul
           taskkill /im "H1D_CALC.exe" /f

    J'aimerais donc avoir le beurre (faire tourner mon simulateur) et l'argent du beurre (le tuer s'il traine de trop) si c'est possible.

    Merci de votre aide.

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    deux solutions

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :: Simulation 
     
    cd ..\Simulations
     
    start /b H1D_CALC<return.txt
    pause
    taskkill /im "H1D_CALC.exe" /f

    ou

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :: Simulation 
     
    cd ..\Simulations
     
    H1D_CALC<return.txt
    timeout /t 10
    taskkill /im "H1D_CALC.exe" /f
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Effectivement j'avais vu ces possibilités mais dans les deux cas on met en standby l'exécution avant de tuer le simulateur... Ce qui fait que si la simulation prend 1 seconde on perd du temps.

    N'y a-t-il pas de fonction qui permette de tuer un processus SI il dure depuis "x" secondes mais qui le laisse se fermer s'il termine avant ces "x" secondes ?

    Merci.

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Essaie quelque chose comme ça où X est le nombre de second

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    timeout /t X /nobreak
    for /f "usebackq skip=3 delims=" %%a in (`tasklist /fi "imagename eq H1D_CALC.exe"`) do (
      if not "%%~a"=="" taskkill /im "H1D_CALC.exe" /f
    )
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Re,

    Merci pour l'info.
    J'ai pu trouver une solution à partir de tasklist et de taskkill. Mon processus étant en 32bit et mon OS étant un 64, la commande taskkill utilisant l'IMAGENAME ne fonctionnait pas...
    En récupérant le PID avec TASKLIST c'est bon.

    J'imagine que ça pourra servir à quelqu'un un jour donc voici le code qui fonctionne pour moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :: Simulation Hydrus 1D
    
    	cd ..\Simulations
    	start /b H1D_CALC<return.txt
    	:yolo
    	ping localhost -n 1 >nul
    	TASKLIST /fi "IMAGENAME eq H1D_CALC.exe" 2>nul | find /i /n "H1D_CALC.exe" >nul	
            IF errorlevel 0 (FOR /F "skip=3 tokens=2" %%i IN ('TASKLIST /FI "IMAGENAME eq H1D_CALC.exe" /FI "CPUTime gt 00:00:05"') DO taskkill /F /PID %%i & Copy "FileRef" FileToReplace)
            IF errorlevel 1 (goto break) >nul
    	goto yolo >nul
    	:break
    Je me place dans le répertoire "Simulations"
    Je démarre l'exe du simulateur
    J'ouvre une boucle infinie "yolo"
    Pause d'une seconde grâce au ping
    Je vérifie sur le processus de simulation est toujours actif
    Si oui -> est-ce qu'il est actif depuis plus de 5 secondes -> si oui on le termine de force et on remplace un fichier par un fichier de référence, sinon on retourne au début de la boucle "yolo"
    Si non (le processus a terminé tout seul en moins de 5 secondes) -> on quitte la boucle

    Merci pour les conseils et l'aide apportée.

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

Discussions similaires

  1. Activer automatiquement une référence si elle n'est pas activée?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/10/2007, 17h27
  2. Créer une procedure si elle n'existe pas.
    Par Chouls dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/01/2007, 10h49
  3. Réponses: 6
    Dernier message: 23/12/2006, 17h36
  4. Réponses: 4
    Dernier message: 08/05/2006, 16h41

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