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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut Problème avec un sleep
    Bonjour ,

    J ai deja poste ce code sur le forum C mais apparement le code serai juste ... Le probleme viendrait d'UNIX ...

    Le probleme c est que le sleep ne marche pas , par contre le terminal affiche un temps different a chaque fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(i=0;i<=client;i++){
        switch(fork()) {
            case 0: {
              srand(getpid());
              temps = (rand() % 10) + 1; 
              printf("client arrive ds %d",temps); 
              sleep(temps);
              processusclient(); 
            }
        }
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par Treuze
    Bonjour ,

    J ai deja poste ce code sur le forum C mais apparement le code serai juste ... Le probleme viendrait d'UNIX ...

    Le probleme c est que le sleep ne marche pas , par contre le terminal affiche un temps different a chaque fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(i=0;i<=client;i++){
        switch(fork()) {
            case 0: {
              srand(getpid());
              temps = (rand() % 10) + 1; 
              printf("client arrive ds %d",temps); 
              sleep(temps);
              processusclient(); 
            }
        }
    }

    salut, ben tu auras sans doute les mêmes réponses...


    au fait, as-tu tester ton sleep seul ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    eh oui , et le sleep seul marche bien

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par Treuze
    eh oui , et le sleep seul marche bien

    et tout le reste marche bien ???
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    j ai teste mon sleep ds un autre programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("avant sleep");
    sleep(5);
    printf("apres sleep");
    aucun probleme avec ce bout de code

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut

    faut lire la premiere ligne pour comprendre
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par gorgonite
    et tout le reste marche bien ???

    je parlais du reste du programme avec le fork & cie
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  8. #8
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par Treuze
    J ai deja poste ce code sur le forum C mais apparement le code serai juste ... Le probleme viendrait d'UNIX ...

    Le probleme c est que le sleep ne marche pas , par contre le terminal affiche un temps different a chaque fois
    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 ...

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    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 ...

  10. #10
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    PArce que c etait qd meme une erreur bien bete ...

  11. #11
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    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;
    }

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

  13. #13
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    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

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

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