Strumenti Utente

Strumenti Sito


lcs:lcs08:esercitazioni:esercitazione10

Esercitazione 10: segnali

Esercizio 0: Gestire SIGINT e SIGTERM

Personalizzare SIGINT e SIGTERM in modo da stampare un breve msg di saluto prima di terminare il processo. Fare in modo che il gestore utilizzi solo funzioni garantite safe e che l'arrivo contemporaneo dei due segnali non interrompa il gestore.

Esercizio 1: killshell

Realizzare una shell rudimentale che legge un comando con eventuali parametri dallo standard input e ne invoca l'esecuzione utilizzando la execvp. La shell deve terminare se viene digitato il comando exit e deve inviare un segnale SIGINT al figlio se l'esecuzione del comando dura piu' di 1 secondo. Ogni volta che un figlio termina, killshell deve stampare un breve messaggio su standard error, indicando il numero del processo terminato, la causa di terminazione (exit o kill) e la causa della terminazione (il segnale ricevuto nel caso della kill oppure lo stato nel caso della exit).

Utilizzare la alarm() per settare il timeout di 1 secondo. La alarm viene interrotta dal segnale SIGCHLD. Usare le macro definite per la waitpid() per testare il tipo di terminazione

Esercizio 2: alarmserver

Realizzare un server alarmserver che attende sul socket alarmsocket le richieste di sveglia da parte dei client. Il formato dei messaggi e' il seguente

seconds wakeup_msg

il server attende per seconds secondi e poi invia al client che ha richiesto la sveglia wakeup_msg sul connection socket.

Il server deve essere in grado di gestire piu' richieste di attesa contemporanee da parte di diversi client.

Realizzare il client e testare alarmserver.

Esercizio 3: cunit

Utilizzare il framework di test cunit per organizzare i test su alarmserver.

lcs/lcs08/esercitazioni/esercitazione10.txt · Ultima modifica: 19/03/2008 alle 11:45 (15 anni fa) da Susanna Pelagatti