Sincronizzazione processi padre-figlio
Ciao a tutti!
Ho scritto questo codice
Il cui scopo dovrebbe (
) essere quello di far si che
- il processo padre invii dopo la system call sleep() un segnale SIGUSR1 al processo figlio
- il processo figlio installi un gestore (handler) per il segnale SIGUSR1;
- quando il figlio riceve il segnale SIGUSR1 visualizzi un messaggio di uscita e termini l’esecuzione.
Più o meno il codice funziona (a parte che quando compare il messaggio da parte del padre che ha appena inviato il segnale il processo figlio è ancora vivo e infatti risponde un'ultima volta con il suo messaggio).Quindi se potete darmi correzioni in merito sarebbe
Avrei comunque alcuni dubbi che vorrei chiarire:
-Nella funzione
-Il segnale SIGUSR1 praticamente in cosa consiste? Cioè io so, ad esempio, che SIGINT equivale a Ctrl-c, ma SIGUSR1 ??
Ho scritto questo codice
#include <signal.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> void catchint(int signo) { printf("\nCatchint: signo = %d\nUSCITA\n", signo); exit(1); } int main() { signal(SIGUSR1, catchint); int pid; if ((pid=fork()) < 0) { perror("fork error"); exit(1); } else if (pid == 0) { for (;;) printf("Sono il figlio e sto ciclando all'infinito !\n"); exit(0); } else { /* il padre invia un segnale SIGKILL al figlio */ sleep(1); kill(pid, SIGUSR1); printf("\nSono il padre e ho inviato SIGUSR1 al figlio!!\n"); exit(0); } }
Il cui scopo dovrebbe (

- il processo padre invii dopo la system call sleep() un segnale SIGUSR1 al processo figlio
- il processo figlio installi un gestore (handler) per il segnale SIGUSR1;
- quando il figlio riceve il segnale SIGUSR1 visualizzi un messaggio di uscita e termini l’esecuzione.
Più o meno il codice funziona (a parte che quando compare il messaggio da parte del padre che ha appena inviato il segnale il processo figlio è ancora vivo e infatti risponde un'ultima volta con il suo messaggio).Quindi se potete darmi correzioni in merito sarebbe

Avrei comunque alcuni dubbi che vorrei chiarire:
-Nella funzione
void catchint(int signo)l'argomento signo (che io ho scritto prendendo spunto da altri esempi studiati) cos'è,da dove viene,chi lo definisce?
-Il segnale SIGUSR1 praticamente in cosa consiste? Cioè io so, ad esempio, che SIGINT equivale a Ctrl-c, ma SIGUSR1 ??