Sto affrontando questo argomento e vorrei essere aiutato sulla risoluzione di un quesito.
L'intero quesito non mi interessa al momento quindi c'è qualcosa nel codice che è di più, quello che mi interessa sarebbe far funzionare due processi figli quando il padre invia un segnale SIGUSR1 ma purtroppo non ci riesco. Posto il codice, dov'è che sbaglio?
Purtroppo mi rimane in loop sui while (soluzione migliorabile utilizzando le variabili di condizione?), quindi deduco che questo segnale non venga mai captato. Dov'è che sbaglio?codice:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <string.h> int sblocca = 0; void signalHandler (int signo); int main (int argc, char *argv[]) { pid_t figlioA, figlioB; int fdpipe[2]; char buffer[10] = "CiaoMondo"; if(pipe(fdpipe) < 0) { printf("Errore nella creazione della pipe\n"); exit(1); } signal(SIGUSR1, signalHandler); switch(figlioA = fork()) { case -1: printf("Errore durante la creazione del figlioA\n"); exit(2); case 0: close(fdpipe[1]); //Chiudo scrittura nel figlio A while(sblocca == 0) { printf("%d - A Dorme\n", getpid()); sleep(1); } printf("Sono il processo %d e termino\n", getpid()); break; default: switch(figlioB = fork()) { case -1: printf("Errore durante la creazione del figlioB\n"); exit(3); case 0: close(fdpipe[1]); //Chiudo scrittura nel figlio B while(sblocca == 0) { printf("%d - B Dorme\n", getpid()); sleep(1); } printf("Sono il processo %d e termino\n", getpid()); break; } close(fdpipe[0]); //Chiudo lettura nel padre sleep(5); write(fdpipe[1], &buffer, strlen(buffer)); printf("Sono il padre, ho scritto nella pipe ed invio un segnale SIGUSR1\n"); kill(SIGUSR1, 0); waitpid(0, NULL, 0); printf("Sono il padre e termino\n"); } exit(0); } void signalHandler (int signo) { signal(SIGUSR1, signalHandler); if(signo == SIGUSR1) { sblocca = 1; } }

Rispondi quotando