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 :

Echange de signaux entre deux processus


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Echange de signaux entre deux processus
    Bonjour,

    je dois écrire un programme C qui crée un processus fils. Le processus père doit être le premier à imprimer un message à l'écran, ensuite le processus fils doit imprimer un message à l'écran, ensuite le père, ensuite le fils, et ainsi de suite... Pour ce faire, je dois utiliser des signaux et je n'ai le droit d'utiliser qu'un seul handler.

    Voici le code que j'ai écrit:
    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <signal.h>
    #include <errno.h>
     
     
    #define SignalDuPere SIGUSR1
    #define SignalDuFils SIGUSR2
     
    pid_t filsID;
     
    void handler(int sig)
    	{
    	switch (sig)
    		{
    		case(SignalDuPere): 	fprintf(stderr,"%ld\n",sig);
    		kill(filsID,SignalDuFils);			
    		case(SignalDuFils): 	fprintf(stderr,"%ld\n",sig);
    		kill(getppid(),SignalDuPere);
    		}
    	}
     
    int main(int argc,char *argv[])
    	{
    	extern int pid;
     
    	switch(filsID=fork())
    		{
    		case (-1):
    			fprintf(stderr, "Erreur sur fork: %s\n",errno); 
    			exit(errno);
     
    		case(0):
    			signal(SignalDuFils, handler);
    			while(1) pause();
     
    		default:
    			signal(SignalDuPere, handler);
    			kill(getpid(), SignalDuPere);
    			while (1) pause();
    		}
    	return 0;
    	}
    Ce code compile sans problème, mais lorsque je lance le programme dans le shell, oh surprise, la fenêtre du shell se ferme ! (Gros plantage quoi !!!).

    Un génie des processus peut-il éclairer ma lampe ?

    Merci!

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par makastreet Voir le message
    Un génie des processus peut-il éclairer ma lampe ?

    Merci!
    Suffit de connaitre le C et de mettre des break dans tes case.

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

Discussions similaires

  1. Communication par pipe entre deux processus
    Par mohamedz dans le forum POSIX
    Réponses: 9
    Dernier message: 02/03/2010, 18h50
  2. Echange de données entre deux système d'information
    Par phy4me dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/07/2008, 11h46
  3. Transférer un tableau entre deux processus
    Par piziwate dans le forum Réseau
    Réponses: 10
    Dernier message: 12/12/2007, 16h11
  4. Redirection entrée standard entre deux processus
    Par mverhaeghe dans le forum POSIX
    Réponses: 5
    Dernier message: 08/04/2007, 17h55
  5. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 10h31

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