11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

1.3. L’ARCHITETTURA DEI PROCESSI 35I segnali effettivamente usati dal sistema sono i primi 31, gli altri sono chiamati real timesignal ed hanno un uso specialistico che va al di là di quello che possiamo affrontare qui. 47 Ingenerale ciascuno di essi ha un compito o un significato specifico, alcuni di essi vengono generatiautomaticamente in caso di errori del programma; ad esempio il segnale SIGSEGV viene inviatodal kernel per segnalare ad un processo una Segment Violation, cioè un accesso illegale allamemoria; 48 altri vengono inviati direttamente dall’utente, come SIGKILL che causa l’immediataterminazione di un processo.Gran parte dei segnali (tutti eccetto SIGKILL e SIGSTOP, che hanno un comportamentospeciale) possono essere intercettati dal processo, che può eseguire una opportuna funzione al loroarrivo. Ad esempio il segnale SIGTERM (che è quello che il comando kill invia di default) serveper richiedere la terminazione immediata di un processo, ma il segnale può essere intercettatoper eseguire delle operazioni di pulizia come ad esempio cancellare dei file temporanei primadell’uscita.Se un segnale non viene intercettato viene eseguita una azione di default che è specifica diciascuno di essi. Nella maggior parte dei casi l’azione consiste nella terminazione immediata delprocesso; questa può però avvenire in due modi, o con una semplice uscita o con l’uscita eseuitainsieme alla creazione, nella directory di lavoro corrente del processo, di un file core che contieneuna copia dello spazio della memoria del processo (viene per questo detto un core dump) che puòessere usato con un programma di debug per vedere in che punto c’è stata l’interruzione. Infinealcuni segnali (come SIGCHLD, che è quello che viene usato per notificare al padre la terminazionedi un figlio) di default vengono ignorati, 49 il programma cioè continua ad essere eseguito senzanessuna conseguenza.Tipici segnali che causano una semplice uscita sono SIGTERM, il default del comando kill,e SIGINT che è associato al carattere di interruzione dato dalla tastiera (vedi sez. 1.3.4), unsegnale che invece produce un core dump è SIGQUIT, così come tutti i segnali relativi ad erroridi programmazione come SIGSEGV, SIGFPE, ecc. Un elenco dettagliato dei segnali, del lorosignificato e delle azioni di default si può trovare nella sezione 9.2 di [1].In generale il comando kill permette di inviare un segnale ad un processo qualunque, specificandocome parametro il PID di quest’ultimo. Come accennato il segnale inviato di defaultè SIGTERM, ma si può inviare qualunque altro segnale specificandone numero o nome precedutoda un - come opzione; ad esempio:kill -9 1029kill -SIGKILL 1029kill -KILL 1029kill -s SIGKILL 1029sono modalità equivalenti di inviare il segnale SIGKILL al processo con PID 1029. Oltre a -se -l il comando kill accetta le opzioni -L (sinonimo di -l) e -V che ne stampa la versione.Per una descrizione accurata delle opzioni si faccia al solito riferimento alla pagina di manualeaccessibile con man kill.Nel caso specifico, dato che SIGKILL non è intercettabile e la sua azione di default è la terminazionedel processo, l’effetto di questo comando è di terminare senza possibilità di scampoil processo in questione. Se infatti SIGTERM viene intercettato può risultare inefficace qualora il47 per una spiegazione più dettagliata al riguardo si può fare riferimento alla sezione 9.4.6 del nono capitolo diGaPiL.48 questo è un’altro dei vantaggi della memoria virtuale, se per un errore di programmazione un processo cercadi scrivere su una parte dello spazio degli indirizzi che non corrisponde a nessuna locazione di memoria associataal processo stesso, il sistema se ne accorge ed invia questo segnale che ne causa la terminazione; si impedisce cosìche un accesso sbagliato possa andare a sovrascrivere la memoria di altri processi.49 nel caso di SIGCHLD non è proprio il caso di farlo, altrimenti, come spiegato in sez. 1.3.1, ci si ritroverà condegli zombie.

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

Saved successfully!

Ooh no, something went wrong!