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

Threads & Processus C++ Discussion :

generation de processus


Sujet :

Threads & Processus C++

  1. #1
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut generation de processus
    bonjour

    j'ai un petit code qui genere des processus et qui les "endormis" pour un delai bien determine le voici:

    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
     
    # include  <unistd.h>
    # include  <iostream>
     
    using namespace std;
     
    void routine( char *nom, int delai )
    {
            pid_t pid;
     
            pid = getpid( );
     
            while( 1 )
            {
                    cout << endl;
                    cout << "processus " << nom << ", pid= " << pid 
                            << ", delai= " << delai << endl << flush; 
                    sleep( delai );
            }
    }
     
    int main( )
    {
            if( fork() == 0 )
                    routine( "fils 1", 2 );
     
            if( fork() == 0 )
                    routine( "fils 2", 4 );
     
            routine( "pere  ", 8 );
     
            return 0;
    }
    et quand je l'execute il m'affiche:
    processus fils 1, pid= 15861, delai= 2

    processus fils 2, pid= 15862, delai= 4

    processus pere , pid= 15860, delai= 8

    processus fils 1, pid= 15861, delai= 2

    processus fils 2, pid= 15862, delai= 4

    processus fils 1, pid= 15861, delai= 2

    processus fils 1, pid= 15861, delai= 2

    processus pere , pid= 15860, delai= 8

    processus fils 2, pid= 15862, delai= 4
    ....

    ce que je ne comprend pas , pourquoi le programme sort de la premiere boucle qui est "infinie" WHILE(1) !!!!

    est ce que "flush" a un effet!!!

    merci
    Soit A un succès dans la vie. Alors A = x + y + z, où x = travailler, y = s'amuser, z = se taire.

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Qu'est ce qui te fait dire qu'il sort de la boule infini ?
    J'aime pas les épinards... Mais alors pas du tout

  3. #3
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Higestromm
    Qu'est ce qui te fait dire qu'il sort de la boule infini ?
    comme vous le voyez dans la fonction routine on a une boucle while qui est conditionnée par 1 !!!

    alors
    Soit A un succès dans la vie. Alors A = x + y + z, où x = travailler, y = s'amuser, z = se taire.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK, puisqu'il y a des gens qui ne comprennent pas la question, on répète:
    La question n'est pas "Qu' est-ce qu'une boucle infinie" mais "Qu'est-ce qui te fait dire que le programme sort de sa boucle infinie"

    Alors, que ce passe-t-il exactement ? Les programment s'arrêtent ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Médinoc
    OK, puisqu'il y a des gens qui ne comprennent pas la question, on répète:
    La question n'est pas "Qu' est-ce qu'une boucle infinie" mais "Qu'est-ce qui te fait dire que le programme sort de sa boucle infinie"

    Alors, que ce passe-t-il exactement ? Les programment s'arrêtent ?

    le probleme est le suivant:
    quand le programme fait le premier appel pour routine il fait endormir le premier processus à l'aide de sleep. mais c'est comment il est sorti de la boucle while pour afficher fils 2 puis parent ...
    Soit A un succès dans la vie. Alors A = x + y + z, où x = travailler, y = s'amuser, z = se taire.

  6. #6
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bah tu créer des processus... c'est normal que leurs executions soit faite en parallele !
    J'aime pas les épinards... Mais alors pas du tout

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Exact:
    • Le processus père n'entre pas dans la première boucle après le fork() : c'est le processus fils qui y entre.
    • Le processus père n'entre pas non plus dans la seconde boucle après le second fork() : c'est le second processus fils qui y entre.
    • Le processus père entre uniquement dans la troisième boucle, et il y reste.

    Si cela n'était pas clair dès le début pour toi, peut-être est-il encore trop tôt pour jouer avec fork()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Le problème des processus, c'est qu'ils sont soumis à priorité...

    C'est celui qui a la priorité la plus haute qui dispose d'un certain temps processeur... jusqu'à ce qu'un autre processus finisse par avoir la priorité la plus haute (c'est fort incomplet, mais ca te permettra de comprendre )

    L'astuce, c'est qu'il n'y a que le processus qui dispose du temps processeur qui "travaille réellement" (ici, qui dort réellement, vu qu'il passe le plus clair de son temps à le faire )... les deux autres... il attendent de pouvoir dormir...

    C'est la raison pour laquelle, à défaut de synchroniser les processus, tu as l'impression qu'il arrivent un peu dans n'importe quel ordre...

    Mais aucun processus ne sort de sa boucle: la preuve: tu peux laisser tourner l'application 110 ans, elle continura à travailler, les pid respectifs ne changeront pas, et la moyenne des fréquences d'apparition tendront vers 4 fils1 pour 2 fils2 et 1 pere...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut generation processus
    le probleme n'est pas le processus en tant que tel mais l'execution sequentielle du code !!!


    Soit A un succès dans la vie. Alors A = x + y + z, où x = travailler, y = s'amuser, z = se taire.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben quoi, elle est tout-à-fait normale...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Médinoc
    Ben quoi, elle est tout-à-fait normale...
    comment vous dite que c'est normal alors qu'il faut un break ou exit(0 ou 1) pour sortir !!!


    Soit A un succès dans la vie. Alors A = x + y + z, où x = travailler, y = s'amuser, z = se taire.

  12. #12
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bah ton main (que tu nomme toi même pere) rentre dans une boucle infini !!! Donc il ne s'arrete pas !

    PS : Je te conseille de faire des exercices plus simple pour débuter car si u as déja des difficultés maintenants tu vas te pendre quand tu vas devoir synchroniser tes processus (ou bien déboguer un problème de synchronisation qui est bien pire)
    J'aime pas les épinards... Mais alors pas du tout

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Citation Envoyé par elghadi_mohamed
    comment vous dite que c'est normal alors qu'il faut un break ou exit(0 ou 1) pour sortir !!!


    Médinoc à très bien expliqué tout le processus séquentiel de l’exécution du code dans

    Citation Envoyé par Médinoc
    Exact:
    • Le processus père n'entre pas dans la première boucle après le fork() : c'est le processus fils qui y entre.
    • Le processus père n'entre pas non plus dans la seconde boucle après le second fork() : c'est le second processus fils qui y entre.
    • Le processus père entre uniquement dans la troisième boucle, et il y reste.

    Si cela n'était pas clair dès le début pour toi, peut-être est-il encore trop tôt pour jouer avec fork()...
    je ne vois pas non plus de "problèmes".

  14. #14
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par Médinoc
    Si cela n'était pas clair dès le début pour toi, peut-être est-il encore trop tôt pour jouer avec fork()...
    un petit google et ca repart...
    besoin de réponses ? demande a un pote

Discussions similaires

  1. generation xml multi processus
    Par mickael.guilbert dans le forum Modules
    Réponses: 3
    Dernier message: 28/05/2007, 19h46
  2. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  3. Réponses: 2
    Dernier message: 04/10/2002, 09h13
  4. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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