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

 C Discussion :

Aide : fork()


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Aide : fork()
    Bonjour, je suis débutant en programmation C pour le système LINUX.

    J'ai un exo à rendre pour jeudi , il faut que je fasse un programme qui lance 5 processus fils et affiche leurs PID(par un message) . Chaque fils devra afficher son PID et celui de son pere (par un message) avant de s'autodétruire.

    J'ai commencé à résoudre l'exo, donc voici mon code:

    Code :
    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
     
    int main(void){
      int i = 1;
      pid_t pidfils;
      while((i<6)&&((pidfils=fork())!=0)){
        printf("Fils numero %d:PID %d\n",i,pidfils);
          i++;
      }
     
     
      if(pidfils==0){
        printf("Je suis le processus %d et mon pere est %d\n",getpid(),getppid());
          }
      return 0;
    }
    Lors de la compilation de problème, aucune erreur se produit.
    Mais lors de l'exécution , un message s'affiche :
    core dumped.
    Quelqu'un pourrait m'aider? Que signifie ce message?

    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Je pense que tu n'es pas dans le bon forum !

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    As-tu juste "core dumped", et rien du tout devant?

    Là sur le coup, je ne vois rien dans ton code qui puisse causer cette erreur...

    As-tu bien activé les warnings du compilateur, pour voir si jamais il signale quelque chose qu'on n'aurait pas vu?

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Il manque du code pour que le père attende ses fils avant de terminer.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut re: aide fork()
    Bonjour,

    Core dumped, veut dire que tu as recu un signal de type SIGSEV (qui est une macro equivalent au chiffre 11) donc un SegmentationFault (erreur de segmentation)...
    +d'info ? lire le man signal .
    Mais deja j'ai une question a te pose:
    pour quoi pidfils=fork())!=0 ?

    as-tu bien lu ton cours? est-ce que tu tests d'abord ton fork pour voir si tout s'est bien passe?
    donc en gros tu dois savoir que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If ((pid = fork()) < 0)
     ton_fork_na_pas_mache;
    else if (pid == 0)
     tu_es_dans_le_fils;
    else
    tu_es_dans_le_pere; /*parce que la ton pid > 0*/
    normalement si je me rappel bien lorsque ton fork echoue il te renvoie une erreur egale a -1... -1 donc etant inferieur a 0.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 779
    Points
    23 779
    Par défaut
    Citation Envoyé par SeRiALP Voir le message
    Core dumped, veut dire que tu as recu un signal de type SIGSEV (qui est une macro equivalent au chiffre 11) donc un SegmentationFault (erreur de segmentation)...
    Pas exactement. « Core dumped » signifie que l'état du processus en mémoire a été déchargé tel quel dans un fichier « core », pour en permettre le déboguage. Ça dépend essentiellement de la valeur de ulimit -c qui limite voire interdit totalement la sortie de ce fichier.

    Ensuite, « core » est bel et bien produit sur réception d'un signal et à la mort du processus, mais ce n'est pas forcément SIGSEGV. Selon man 7 signal, les signaux concernés sont :

    Code Text : 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
           Signal     Value     Action   Comment
           ----------------------------------------------------------------------
           SIGQUIT       3       Core    Quit from keyboard
           SIGILL        4       Core    Illegal Instruction
           SIGABRT       6       Core    Abort signal from abort(3)
           SIGFPE        8       Core    Floating point exception
           SIGSEGV      11       Core    Invalid memory reference
           SIGBUS      10,7,10   Core    Bus error (bad memory access)
           SIGSYS      12,-,12   Core    Bad argument to routine (SVr4)
           SIGTRAP        5      Core    Trace/breakpoint trap
           SIGXCPU     24,24,30  Core    CPU time limit exceeded (4.2BSD)
           SIGXFSZ     25,25,31  Core    File size limit exceeded (4.2BSD)
           SIGIOT         6      Core    IOT trap. A synonym for SIGABRT
     
           Up to and including Linux 2.2, the default behavior for SIGSYS, SIGXCPU, SIGXFSZ, and (on architectures other than SPARC and MIPS) SIGBUS was to terminate the  process  (without  a
           core  dump).   (On  some  other  Unix  systems  the default action for SIGXCPU and SIGXFSZ is to terminate the process without a core dump.)  Linux 2.4 conforms to the POSIX.1-2001
           requirements for these signals, terminating the process with a core dump.

    Un fichier « core » est notamment généré par SIGABRT, lui-même déclenché par abort(). En C++, notamment, g++ déclenche abort() lorsqu'une exception n'est pas rattrapée du tout.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    merci pour l'info Osidian

Discussions similaires

  1. Aide sur les fork
    Par Linquisiteur dans le forum Débuter
    Réponses: 6
    Dernier message: 27/05/2013, 00h14
  2. Aide avec les fork()
    Par Raikyn dans le forum C
    Réponses: 45
    Dernier message: 31/03/2013, 20h40
  3. Aide fork() petit-fils gérés par le père ?
    Par Drexler82 dans le forum Programmation et administration système
    Réponses: 15
    Dernier message: 07/06/2011, 15h04
  4. Besoin d'aide pour une gestion d'un multi fork avec chien degarde.
    Par Baradhur dans le forum Threads & Processus
    Réponses: 11
    Dernier message: 21/01/2011, 09h28
  5. Aide : fork()
    Par Spaki dans le forum Administration système
    Réponses: 4
    Dernier message: 11/03/2010, 16h33

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