11.07.2014 Views

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

SHOW MORE
SHOW LESS

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");

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!