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 :

Problème avec un sleep


Sujet :

Linux

  1. #21
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par 2Eurocents
    Qu'est-ce qui te fait conclure que le sleep ne marche pas ???

    Le programme rend la main immédiatement, mais c'est tout à fait normal, puisque le sleep est fait dans chacun des processus fils (retour de fork à 0).

    Par contre, la boucle for (i ...) étant dupliquée pour chaque fils, ça va finir par faire un sacré paquet de processus !

    Avec client = 5, ça fait un processus qui en lance 6, qui chacun en lancent 5, qui chacun en lancent 4, qui ...

    Je ne vois aps pourquoi tu dis ca , le fils est cree ds la boucle (fork retourne 0, le fils n a pas connaissance de la boucle) et enchaine sur processusclient().

    Meme si le code qui precede le fork est copie dans le processus fils, le pointeur d instrucitons ne repasse pas sur ce code

    Enfin sauf si je me trompe ...

  2. #22
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut
    PArce que c etait qd meme une erreur bien bete ...

  3. #23
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Treuze
    Je ne vois pas pourquoi tu dis ca , le fils est cree dans la boucle (fork retourne 0, le fils n a pas connaissance de la boucle) et enchaine sur processusclient().

    Meme si le code qui precede le fork est copie dans le processus fils, le pointeur d instructions ne repasse pas sur ce code

    Enfin sauf si je me trompe ...
    Avec fork, tout le code est dupliqué, la valeur courante des variables aussi, et chaque processus dispose de son propre pointeur d'instruction. Le seul moyen de savoir si l'on est dans le père où le fils est de regarder le code de retour de fork : 0 on est dans le fils.

    Le fils contient donc le code de la boucle, sa propre valeur de i et d'après toi, que fait il lorsqu'il a fini d'exécuter processusclient ??? Il sort du switch, et passe au i suivant du for !

    Donc, un processus fils pour un i donné, sera aussi père de plusieurs processus de i+1 à client.

    Juste pour s'en convaincre : ton code à peine altéré par des sorties de suivi :
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
     
    int main()
    {
        int i,temps,client=2;
     
        for(i=0;i<=client;i++){
            switch(fork()) {
                case 0: 
                    srand(getpid());
                    temps = (rand() % 10) + 1; 
                    printf("pid %d iter %d fils avant %d s\n", getpid (), i, temps); 
                    sleep(temps);
                    /*processusclient(); */
                    printf("pid %d iter %d fils apres %d s\n", getpid (), i, temps); 
                    break;
                default:
                    printf("pid %d iter %d parent\n", getpid (), i, temps); 
            }
        }
        return EXIT_SUCCESS;
    }
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #24
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut
    Non mon fils lance la fonction processusclient() qui se termine apr un exit(0)

  5. #25
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Treuze
    Non mon fils lance la fonction processusclient() qui se termine par un exit(0)
    Ok, mais çà, nous n'avions aucun moyen de le savoir
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problême avec fonction Sleep
    Par WDKyle dans le forum VB.NET
    Réponses: 8
    Dernier message: 31/03/2010, 11h30
  2. [subversion/trac] Probl. de permission avec authz dans svnserve.conf
    Par mcdeffice dans le forum Administration système
    Réponses: 0
    Dernier message: 23/07/2009, 16h21
  3. Problème avec fonction sleep
    Par pitxu dans le forum Apache
    Réponses: 2
    Dernier message: 07/02/2008, 03h27
  4. [PHP-JS] probleme avec fonction sleep()
    Par m_jaz3 dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2007, 14h04
  5. Problème avec fonction Sleep
    Par Evens dans le forum C++
    Réponses: 2
    Dernier message: 28/11/2007, 14h14

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