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 sur un sleep


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Par défaut problème sur un sleep
    re-bonjour a tous
    voila le code qui me pose problème.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
     
     void error (char *msg) {
      fprintf(stderr,"%s",msg);
      exit(-1);
    }
     
    void gereUSR1 ( int signo )
    {printf("le pere %d redémarre",getpid());
    }
     
     void bodyFils()
     {
     
     printf("je suis %d pendant 10s et j'envoie un signal a mon pere",getpid());
     sleep (5);	
     kill(getppid(),SIGUSR1); 
     
     
     }
     
     
     void bodyPere()
     {
     printf("j'attend un signal de mon fils");
     pause();
     printf("je suis %d j'ai recu un signal de mon fils",getpid());
     exit(0); 
     }
     
     
    int main(void) 
    { 
    signal (SIGUSR1,gereUSR1);
    switch(fork()) {
     
      case -1 : 
        error("Erreur de création du fork\n");
        break;
     
      case 0 : // Je suis le fils
        bodyFils();
    	exit(0);
        break;
      }
     
      /* Je suis forcemment le père */
      bodyPere();
      while (wait(0) != -1);
    }
    alors je suis peut etre con mais je ne comprend pas pourquoi ca ne se passe pas comme je voudrait a savoir :
    je suis 3124 pendant 10s et j'envoie un signal a mon pere
    attente de 5s
    j'attend un signal de mon fils
    le pere 3396 redémarre je suis 3396
    j'ai recu un signal de mon fils

    la ca me fait une attente de 5 seconde puis je recupere mes printfs d'un coup ???

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Pour forcer l'affichage, termine les printf par '\n' , ou fait les suivre d'un fflush(stdout) si tu ne veux pas de retour à la ligne, ou utilise fprintf sur stderr

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ou encore configurer la bufferisation du flux de sortie standard
    http://man.developpez.com/man3/setvbuf.3.php

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    on encore utiliser stderr, et non pas stdout (fprintf(stderr...) au lieu de printf...

    stderr est syncrhone, alors que stdout ne l'est pas...

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

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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