Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio11: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 essere asynchronous signal 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 SIGKILL 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.

Nota: Utilizzare la SC alarm() per impostare la sveglia sul server; considerare che, in un dato istante, un solo allarme puo` essere schedulato per processo e che, nel caso di processi multi-threaded, il conseguente segnale SIGALRM viene inviato al processo e non ad uno specifico thread

informatica/sol/laboratorio11/esercitazioni/esercitazione10.txt · Ultima modifica: 16/09/2011 alle 11:39 (13 anni fa) da giovannni