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 ??