kwb
29-02-2012, 23:32
Ciao a tutti!
Ho da fare un programma in C su sistema *NIX dove il padre crea un figlio, il figlio invia un SIGUSR1 al padre. Il padre riceve il segnale, lo stampa e invia al figlio il segnale SIGUSR2. Il figlio riceve il segnale e lo stampa.
Ho usato una funzione handler per fare sta cosa, ma ho comunque problemi, perchè sebbene riesca a inviare il segnale al padre e farlo stampare, poi non riesco a inviare dal padre il segnale al figlio...
Ecco cosa ho scritto:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
void signalRx(int segnale);
int main (int argc, const char * argv[])
{
int pid;
printf("Parent pid is: %d\n\n", getpid());
if((pid=fork())!=0) //Parent
{
signal(SIGUSR1, signalRx);
printf ("After signal in parent\n");
wait(0); //We must wait because the child might not have taken control
kill(pid, SIGUSR2);
wait(0);
printf("After kill in parent\n");
return 0;
}
else //Child
{
signal(SIGUSR2, signalRx);
printf("Child 1 ( %d ) of parent %d\n\n", getpid(), getppid());
kill(getppid(), SIGUSR1);
printf("After kill in child\n");
}
}
void signalRx(int segnale)
{
if(segnale==SIGUSR1)
printf("SIGUSR1 received by process %d\n", getpid());
if(segnale==SIGUSR2)
printf("SIGUSR2 received by process %d\n", getpid());
}
Ho da fare un programma in C su sistema *NIX dove il padre crea un figlio, il figlio invia un SIGUSR1 al padre. Il padre riceve il segnale, lo stampa e invia al figlio il segnale SIGUSR2. Il figlio riceve il segnale e lo stampa.
Ho usato una funzione handler per fare sta cosa, ma ho comunque problemi, perchè sebbene riesca a inviare il segnale al padre e farlo stampare, poi non riesco a inviare dal padre il segnale al figlio...
Ecco cosa ho scritto:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
void signalRx(int segnale);
int main (int argc, const char * argv[])
{
int pid;
printf("Parent pid is: %d\n\n", getpid());
if((pid=fork())!=0) //Parent
{
signal(SIGUSR1, signalRx);
printf ("After signal in parent\n");
wait(0); //We must wait because the child might not have taken control
kill(pid, SIGUSR2);
wait(0);
printf("After kill in parent\n");
return 0;
}
else //Child
{
signal(SIGUSR2, signalRx);
printf("Child 1 ( %d ) of parent %d\n\n", getpid(), getppid());
kill(getppid(), SIGUSR1);
printf("After kill in child\n");
}
}
void signalRx(int segnale)
{
if(segnale==SIGUSR1)
printf("SIGUSR1 received by process %d\n", getpid());
if(segnale==SIGUSR2)
printf("SIGUSR2 received by process %d\n", getpid());
}