Esercitazione 10
Attenzione: Includere SEMPRE la gestione degli errori (usare le MACRO in sysmacro.h).
Esercizio 1. (segnali e timeout)Realizzare un processo che visualizza un breve messaggio, setta un timeout di 2 secondi utilizzando la alarm(), infine visualizza un messaggio di saluto e termina. Definire un opportuno gestore di SIGALRM ed utilizzare la pause() per mettersi in attesa del segnale.
Esercizio 2.
(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 STDERR, 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 sleep() per settare il timeout di 1 secondo. LA sleep viene
interrotta dal segnale SIGCHLD ed in caso di interruzione ritorna come valore
il numero di secondi rimasti. NON usare alarm() e sleep() assieme perche' la
loro gestione di SIGALRM interferisce.
Usare le macro definite per la wait() per testare il tipo di terminazione