begin process at 2012 05 30 00:06:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

[C/Linux]problème de fork wait


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C/Linux]problème de fork wait

vendredi 12 janvier 2007 à 15:39:15 | [C/Linux]problème de fork wait

rt15

Membre Club Administrateur CodeS-SourceS
Bonjour,

Le code en fin du message produit la sortie suivante :

Creation du fils
debut attente du fils
fin de l'attente du fils
Fin du fils

Alors que le père devrait attendre le fils.

Mais où est le problème svp ?

===============================================
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>

int main(argc,argv)
{
  int status;
  pid_t pid;

  printf("Creation du fils\n");
  pid = fork();
 
  if (pid < 0)
  {
    perror("Fork failed\n");
    exit(errno);
  }
  else if (pid != 0)
  {
    sleep(2);  /* On fait durer un peu le fils */
    printf("Fin du fils\n");
    exit(0);
  }

  printf("debut attente du fils\n");
  wait(&status);
  printf("fin de l'attente du fils\n");

  exit(0);

} /* Fin du main */



vendredi 12 janvier 2007 à 16:09:51 | Re : [C/Linux]problème de fork wait

laurent1024

Membre Club
Il faut faire une codition if(pid==0) { code du pere} else {code du fils}

http://pwet.fr/man/linux/appels_systemes/wait
++
vendredi 12 janvier 2007 à 16:47:39 | Re : [C/Linux]problème de fork wait

rt15

Membre Club Administrateur CodeS-SourceS
Merci pour cette réponse rapide, mais j'ai fait :

if ( pid != 0 ) { code du fils; exit(0); }  code du père

Donc c'est équivalent. Le problème est ailleurs...

vendredi 12 janvier 2007 à 19:23:03 | Re : [C/Linux]problème de fork wait

vecchio56

Administrateur CodeS-SourceS
Est-on sûr que l'ordre des printf est bien conservé?

_____________________________________
Un éditeur de ressources gratuit pour Windows

lundi 15 janvier 2007 à 10:07:45 | Re : [C/Linux]problème de fork wait

rt15

Membre Club Administrateur CodeS-SourceS
Avec le sleep de deux secondes dans le client, y a quand même de la marge.
lundi 15 janvier 2007 à 12:38:37 | Re : [C/Linux]problème de fork wait

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
J'ai été sauvé par mon binôme (Qui est moche soi dit en passant).

Extrait du man de fork :

       On success, the PID of the child process is returned  in  the  parent's
       thread  of execution, and a 0 is returned in the child's thread of exe-
       cution.  On failure, a -1 will be returned in the parent's context,  no
       child process will be created, and errno will be set appropriately.

C'est marrant comme tout le monde est tenté de penser que le pid de zéro est pour le père. Ca m'apprendra à lire les pages de man .

Donc le bon code était :

int main(argc,argv)
{
  int status;
  pid_t pid;

  printf("Creation du fils\n");
  pid = fork();
 
  if (pid < 0)
  {
    perror("Fork failed\n");
    exit(errno);
  }
  else if (pid == 0)
  {
    sleep(2);  /* On fait durer un peu le fils */
    printf("Fin du fils\n");
    exit(0);
  }

  printf("debut attente du fils\n");
  wait(&status);

  printf("fin de l'attente du fils\n");

  exit(0);
}


Cette discussion est classée dans : fin, include, fils, pid, fork


Répondre à ce message

Sujets en rapport avec ce message

Fork langage C [ par lozxxx ] Bonjour, je suis débutant en programmation j aimerais savoir comment créer un programme père qui crée 2 fils, chaque fils crée deux fils, chaque proce Recuperer PID de l'appli et ecrire dans un fichier [ par Metalbobinou ] Bonsoir,Alors voila, vu que j'ai du mal en C, et que cela va etre necessaire que j'en fasse pour mes etudes, j'ai decide de m'y mettre.J'ai voulu fair Signaux de base [ par manta7 ] Bonjour à tous.Je débute en signaux et j'aimerais faire un simple programme qui crée un fils avec un bon vieux fork, avec ds le code du fils une atten Petit Programme [ par jarod05 ] Bonjour, Je suis à la recherche d'un code qui me permet :      de lire sur la ligne de commande en utilisant argc et argv le nbre N de processus à cré Explication et correction de ce programme [ par bounkolh ] Bonjour, est ce que quelqu'un peut m'aider à expliquer et corriger ce programme svp? #include #include int main(int argc, char *argv[]) { int mon Récupérer le pid lors d'un double fork() [ par tinram ] Bonjour,    J'écris une interface graphique pour controler jack, un serveur de son sous nux, et j'ai un ptit problème. Pour lancer jack, je passe par fork+exec ? [ par garslouche ] Bonjour, je bosse sous Linux (g++) avec Qt (mais du C ou du C++ standard peut très bien faire l'affaire) et voudrais que mon programme lance un autre communication par file de message [ par adri85 ] Bonjour,Je débute la programmation sous unix et je souhaite développer une petite application. eLe programme père demande à l'utilisateur dans un dial Passer un code Unix sous Windows (problème avec fork) [ par nepomuk ] Je cherche à passer ce code sous windows :pid_t pid;pid=fork(); switch (pid){ case '0' : Envoi_carte(Text); break; case default La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ] bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales