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

POSIX C Discussion :

fork() wait() waitpid() et companie


Sujet :

POSIX C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut fork() wait() waitpid() et companie
    Salut à tous,

    j'essais d'écrire un programme utilisant fork() afin de pouvoir utiliser 2 sockets dans mon programme mais le probleme est que le programme pere n'attend pas la fin du fils pour se fermer.

    J'utilise pourtant la fonction wait(0);
    je ne comprend donc pas pourquoi le processus pere se ferme sans attendre la fin du processus fils.

    si quelqu'un a une idée...

    le code est visible ici
    (il y a surement plein de chose pas tres "propre" mais ne soyez pas trop choqué quand même )
    merci

  2. #2
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    En effet y'a plein de chose ...

    Voilà le squelette du code pour ce que tu veux faire (tu l'as peut être déjà fait):
    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
     
    int main(){
       int pid = fork();
       if(pid > 0){
          //Code du pere
          int statut;
          int options = 0;
          waitpid(pid, &statut, options);
       }
       else{
          if(pid==0){
             //Code du fils
          }
          else{
             //Probleme
          }
       }
       return EXIT_SUCCESS;
    }
    Aprés, le traitement peux être beaucoup plus complexe.
    En effet si un signal est réçu le wait est arrété, même si le fils n'est pas terminé.
    Il faut aussi tester si le fils c'est bien terminé, enfin il y a plein de chose...

    man fork et man waitpid son tes amis .

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci bien, en utilisant ton exemple ça a l'air de fonctionner.

    Mais il me vient à l'esprit une question,

    dans le processus fils je déclare un char **mavar;
    dans le programme principal j'ai une fonction qui alloue de la mémoire à l'aide de malloc().

    en gros je passe le char **mavar en parametre à la fameuse fonction qui lui alloue de la mémoire avec malloc()

    est-ce que cela est possible ?

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    A priori oui.

Discussions similaires

  1. Fork & wait(0)
    Par stoner dans le forum Débuter
    Réponses: 7
    Dernier message: 14/02/2013, 02h38
  2. fork(), waitpid() et gestion des erreurs
    Par domiq44 dans le forum C
    Réponses: 3
    Dernier message: 19/01/2011, 15h07
  3. Fork et wait
    Par ugo188 dans le forum Général Python
    Réponses: 24
    Dernier message: 26/01/2010, 14h18
  4. [debutant] fork et wait
    Par nyakooza dans le forum Linux
    Réponses: 4
    Dernier message: 26/08/2008, 21h27
  5. fork wait
    Par lafracas dans le forum POSIX
    Réponses: 2
    Dernier message: 19/03/2005, 11h57

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