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