[cllfst] sigaux

[ Thread Index | Date Index | More lists.tuxfamily.org/cllfst Archives ]


J'ai trouvé un problème lorsque je developpais un petit programme en C où j'utilise des signaux. J'ai rencontré un problème que je n'arrive pas à le résoudre. Le problème est que le père envoi un signal (SIGUSR1) à son fils, qui n'a jamais pu le detecter.

Est-ce que quelqu'un peut detecter où est le problème?
////////////////////////////DEBUT CODE///////////////////////
#include < stdio.h>
#include <signal.h>

void f()
{
/*
 * f est la fonction du traitement du signal SIGUSR1 quand le fils le recevra
 */
    printf("le signal est receptionné(%d)\n",getpid());
    signal(SIGUSR1,f);
}

int main()
{
    int pid; //Pour y mettre le pid du fils

    if (pid=fork())
    {
    /*
     * Le bloc du père
     */
        printf("(%d) je suis le père\n",getpid());
        sleep(1); //Pause necessaire pour s'assurer que le fils sera pret pour recevoir et traiter le signal
        kill(SIGUSR1,pid); //Envoi du signal SIGUSR1 au fils
    }
    else
    {
    /*
     * Le bloc du fils
     */
        signal(SIGUSR1,f); //Associe le traitement f() au signal SIGUSR1 qaund il sera reçu
        printf("(%d) fils de (%d)\n",getpid(),getppid());
        pause(); //Bloque le fils jusqu'ç ce qu'il reçoit un signal
    }
    return 0;
}

////////////////////FIN CODE//////////////////////////

Le code est en piece jointe assi avec ce mail.
#include <stdio.h>
#include <signal.h>

void f()
{
/* 
 * f est la fonction du traitement du signal SIGUSR1 quand le fils le recevra
 */
	printf("le signal est receptionné(%d)\n",getpid());
	signal(SIGUSR1,f);
}

int main()
{
	int pid; //Pour y mettre le pid du fils

	if (pid=fork())
	{
	/*
	 * Le bloc du père
	 */
		printf("(%d) je suis le père\n",getpid());
		sleep(1); //Pause necessaire pour s'assurer que le fils sera pret pour recevoir et traiter le signal
		kill(SIGUSR1,pid); //Envoi du signal SIGUSR1 au fils
	}
	else
	{
	/*
	 * Le bloc du fils
	 */
		signal(SIGUSR1,f); //Associe le traitement f() au signal SIGUSR1 qaund il sera reçu
		printf("(%d) fils de (%d)\n",getpid(),getppid());
		pause(); //Bloque le fils jusqu'ç ce qu'il reçoit un signal
	}
	return 0;
}


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/