Sincronizzazione processi padre-figlio

franbisc
Ciao a tutti!
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 ( :lol: ) 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 :smt023

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

Risposte
franbisc
up

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.