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

Linux Discussion :

[Bash] Limiter l'execution d'un programme dans le temps


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut [Bash] Limiter l'execution d'un programme dans le temps
    Bonsoir :3

    J'ai un petit problème actuellement...

    j'ai un programme où je dois tester le temps d'exécution selon la taille des données en entrée...

    J'ai deux paramètres, qui sont donc remplacés par i et j... et ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    for i in 10 20 30 40 50 60 70 80 90 100
    do
      for j in 10 20 30 40 50 60 70 80 90 100
      do
        ./program $i $j
      done
    done
    Le problème est que j'aimerai bien arrêter l'execution de ./program si le temps d'execution est supérieur à 5 minutes...


    Comment arrêter l'exécution de ./program s'il tourne toujours après 5 minutes ?

    Merci beaucoup
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    for i in 10 20 30 40 50 60 70 80 90 100
    do
      for j in 10 20 30 40 50 60 70 80 90 100
      do
        ./program $i $j &
          sleep 5m
          if [ $(pidof program) ]; then kill $! ; fi
             # il faut impérativement un espace entre ! et ;
      done
    done
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Bonjour,

    Votre réponse convient au problème que j'ai énoncé cependant je crois avoir fait l'erreur de dissocier mon problème en deux parties indépendantes... Qui apparemment ne peuvent l'être.

    Mon problème est le suivant.

    J'ai un programme qui prend deux paramètres en entrées, paramètres variants grâce à la double boucle pour.
    J'ai besoin de connaître le temps mis par le programme pour s'exécuter fonction de ces deux paramètres, sachant que si le programme met plus de 5 minutes à s'exécuter, je dois l'arrêter.

    Le tout devant être consigné dans un fichier sous la forme
    param1 param2 realTime
    Si on laisse tomber le coup de la double boucle, on se retrouve avec un shell qui doit, récupérer le temps mis par un programme (<= 5min ou arrêt) fonction de i et j.

    J'ai pensé à quelque chose en ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/bin/bash
    logfile=file.log
    i=10
    j=10
    real_time=$(/usr/bin/time -f "%E real" ./random $1 $2 2>&1 > /dev/null) & sleep 1s
    if [ $(pidof program) ]; then
    	kill $! ;
    fi
    entry="$i\t\t$j\t\ttemps réel -> ${real_time}"
    echo -e "$entry" >> $logfile
    Le problème étant que du coup, je ne récupère plus le temps...

    j'obtiens
    10 10 temps réel ->
    Sauriez vous comment faire ?

    Merci pour votre aide
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    time envoie sa sortie sur la sortie d'erreur standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    realtime=$(/usr/bin/time -f "%E real" ./random 2>&1 1>random.log)
    Ici, on redirige la sortie d'erreur standard vers la sortie standard, pour affecter la variable; et la sortie standard vers un fichier log (si tu en as besoin), ou vers /dev/null
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/05/2007, 13h51
  2. Réponses: 1
    Dernier message: 10/11/2006, 11h04
  3. Executer programme dans mon application
    Par Conker dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2006, 03h16
  4. Erreur Windows ! Dans l'execution d'un programme !
    Par Geoff! dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/06/2006, 16h36
  5. [Licence]Programme limité dans le temps
    Par tof.p dans le forum Général Java
    Réponses: 2
    Dernier message: 28/10/2005, 14h09

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