UNIX: testo della esercitazione 5 in laboratorio su primitive per la ...
UNIX: testo della esercitazione 5 in laboratorio su primitive per la ...
UNIX: testo della esercitazione 5 in laboratorio su primitive per la ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
#<strong>in</strong>clude <br />
void catch<strong>in</strong>t(<strong>in</strong>t signo)<br />
{<br />
pr<strong>in</strong>tf("catch<strong>in</strong>t: signo = %d\n", signo);<br />
/* non si prevedono azioni di term<strong>in</strong>azione: ritorno al segna<strong>la</strong>to */<br />
}<br />
<strong>in</strong>t ma<strong>in</strong>()<br />
{<br />
signal(SIGINT, catch<strong>in</strong>t);<br />
for (;;)<br />
{<br />
pr<strong>in</strong>tf("In attesa del segnale SIGINT (premere Ctrl^c)\n");<br />
sleep(1);<br />
}<br />
}<br />
exit(0);<br />
Esercizio 2:<br />
Il processo padre crea un processo figlio e lo uccide.<br />
#<strong>in</strong>clude <br />
#<strong>in</strong>clude <br />
<strong>in</strong>t ma<strong>in</strong>()<br />
{<br />
<strong>in</strong>t pid;<br />
if ((pid=fork()) < 0)<br />
{<br />
<strong>per</strong>ror("fork error");<br />
exit(1);<br />
}<br />
else<br />
if (pid == 0)<br />
{<br />
/* il figlio dorme f<strong>in</strong>o a quando riceve il segnale SIGKILL, poi muore */<br />
for (;;)<br />
pr<strong>in</strong>tf("sono il figlio e sto cic<strong>la</strong>ndo all’<strong>in</strong>f<strong>in</strong>ito!\n");<br />
pr<strong>in</strong>tf("questo messaggio non dovrebbe mai essere vi<strong>su</strong>alizzato!\n");<br />
exit(0);<br />
}<br />
else<br />
{<br />
/* il padre <strong>in</strong>via un segnale SIGKILL al figlio */<br />
sleep(3);<br />
kill(pid, SIGKILL);<br />
pr<strong>in</strong>tf("\nsono il padre e ho ucciso il figlio!!\n");