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

Programmation et administration système Perl Discussion :

[Perl]problème avec fork


Sujet :

Programmation et administration système Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [Perl]problème avec fork
    Bonjour à tous,
    Voilà, après avoir lu la faq sur fork (merci pour ça), j'ai tenté la chose suivante pour faire un compteur (dans un premier temps):

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    $timeout=30;
     
    &NewPid;
     
     
    sub NewPid()
    {
          defined($pid = fork) or die "Pas de fork possible : $!";
          unless($pid) 
          {
                $time=$timeout;
                while($time>0)
                {
                      system("cls");
                      print "Il vous reste: $time\n secondes";
                      $time=&Decompte($time);
                }
          }
    waitpid($pid, 0);
    }
     
    #Retour au père;
     
     
     
    sub Decompte()
    {
        $decompte=$_[0];
        $decompte=$decompte-1;
        sleep(1);
        return $decompte;
    }
    Mais j'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    L'instruction à "0x2806c0f9" emploie l'adresse mémoire "0xabababb3". La mémoire ne peut être read.
    Clique ok pour terminer le programme.
    Cliquez sur annuler pour débogue rle programme
    Bien sûr quand je clique sur ok, ça ferme le programme et quand ej clique sur annuler, ça me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl a généré des erreurs et windows va fermé perl
    Voilà, qu'est-ce qui ne va pas dans mon script ????

    Merci pour vos réponses



    PS: A noter que je n'ai pas d'erreur et que ça fonctionne bien lorsque je fais:
    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
    22
    23
    24
    25
    26
    27
    28
    29
     
    $timeout=30;
     
     
     
          defined($pid = fork) or die "Pas de fork possible : $!";
          unless($pid) 
          {
                $time=$timeout;
                while($time>0)
                {
                      system("cls");
                      print "Il vous reste: $time\n secondes";
                      $time=&Decompte($time);
                }
          }
    waitpid($pid, 0);
     
    #Retour au père;
     
     
     
    sub Decompte()
    {
        $decompte=$_[0];
        $decompte=$decompte-1;
        sleep(1);
        return $decompte;
    }
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Rebonjour,
    J'ai règlé mon problème. En fait il fallait appeler la fonction NewPid comme cela:
    et non comme je le faisais:
    Je ne sais pas pourquoi, mais ça marche ainsi.


    cependant, je ne ferme pas ce poste car j'ai un problème toujours avec les thread je crois:

    Explication du petit script:
    Compteur qui décompte de 10 à 1 seconde.
    Au bout de 1 seconde, il demande s'il on veut continuer, si oui, il recrée un processus fils, sinon, il sort.

    Problème:
    Lorsque je mets 5 fois 'o' (pour continuer) par exemple, je suis obligé de taper 5 fois 'n' (pour arrêter) afin de sortir du programme complétement.

    Voici mon script:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    $timeout=30;
     
     
    &NewPid();
     
    sub AskToContinue()
    {
          #&NewPid();
          print "Voulez vous continuer ?(o/n): ";
          $in=<STDIN>;
          chomp($in);
          if($in eq 'o')
          {
                &NewPid();
          }
          else
          {
                exec ("echo OK, Byyyyeee \1");
                exec("exit");
          }
    }
     
     
     
    sub NewPid()
    {
          defined($pid = fork) or die "Pas de fork possible : $!";
          unless($pid) 
          {
                $time=$timeout;
                while($time>0)
                {
                      system("cls");
                      print "Il vous reste: $time secondes\n";
                      $time=&Decompte($time);
                }
          }
    waitpid($pid, 0);
    &AskToContinue();
    }
     
     
     
    sub Decompte()
    {
        $decompte=$_[0];
        $decompte=$decompte-1;
        sleep(1);
        return $decompte;
    }

    Je ne coprends pas pourquoi je ne sors pas du premier coups???
    Quelqu'un peut il m'aider ????
    Merci !!!!!
    tout le monde est d'accord pour critiquer la pensée unique

Discussions similaires

  1. [PERL]problème avec mon premier programme
    Par lucifer01 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 07/04/2009, 18h38
  2. Biomart Perl : problème avec getResultTable()
    Par picopom dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/03/2009, 15h36
  3. probléme avec fork()
    Par yous18 dans le forum C
    Réponses: 38
    Dernier message: 08/03/2008, 11h21
  4. problème avec fork et execvp !
    Par julien.cousineau dans le forum Linux
    Réponses: 0
    Dernier message: 07/10/2007, 23h38
  5. [PERL] Problème avec map
    Par LE NEINDRE dans le forum Langage
    Réponses: 9
    Dernier message: 05/10/2005, 09h48

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