Segnale (informatica)
Da Wikipedia, l'enciclopedia libera.
In informatica, un segnale è una notifica asincrona trasmessa da un processo ad un altro. Tipicamente nessun dato viene trasmesso assieme al segnale, contrariamente a quanto accade, in generale, per gli eventi nella programmazione ad eventi.
Nei sistemi operativi Unix, Unix-like ed in genere quelli che seguono le specifiche POSIX, esiste una metodologia uniforme di utilizzare i segnali, come l'utilizzo della chiamata di sistema kill()
per mandare segnali, oppure l'uso di signal()
e sigaction()
per la definizione delle funzioni per la gestione dei segnali.
La Single Unix Specification specifica i seguenti segnali per <signal.h>
:
Nome | Significato |
---|---|
SIGABRT | Interruzione anormale (abort) del processo. |
SIGALRM | Segnale sollevato da alarm() . |
SIGBUS | Errore di bus: "tentato accesso ad una porzione indefinita di memoria" ("access to undefined portion of memory object" (SUS)). |
SIGCHLD | Processo figlio terminato o fermato (oppure ripartito (XSI)). |
SIGCONT | Il processo può continuare, se era stato fermato. |
SIGFPE | Eccezione in un numero in virgola mobile: "operazione aritmetica erronea" ("erroneous arithmetic operation" (SUS)). |
SIGHUP | Hangup: generalmente viene sollevato quando un terminale viene chiuso. |
SIGILL | Istruzione illegale. |
SIGINT | Interruzione del processo. |
SIGKILL | Terminazione immediata (kill) del processo. Questo segnale non può essere ignorato ed il processo che lo riceve non può eseguire delle operazioni di chiusura "morbida". |
SIGPIPE | Se un processo che dovrebbe leggere da una pipe termina inaspettatamente, questo segnale viene inviato al programma che dovrebbe scrivere sulla pipe in questione. |
SIGQUIT | Interruzione del processo. |
SIGSEGV | Il programma ha generato un errore di segmentazione. |
SIGSTOP | Ferma temporaneamente l'esecuzione del processo: questo segnale non può essere ignorato. |
SIGTERM | Terminazione del programma; è il segnale inviato di default dalla chiamata di sistema kill() . |
SIGTSTP | Ferma temporaneamente l'esecuzione del processo. |
SIGTTIN | Un processo in esecuzione in background tenta di leggere da terminale ("in"). |
SIGTTOU | Un processo in esecuzione in background tenta di scrivere sul terminale ("out"). |
SIGUSR1 | Definito dall'utente. |
SIGUSR2 | Definito dall'utente. |
SIGPOLL | Si è resa possibile un'operazione di input/output, permette il polling (XSI). |
SIGPROF | Un conto alla rovescia impostato per il processo è terminato: misura il tempo di CPU usato dal processo e dal sistema per eseguire azioni istruite dal processo stesso (XSI). |
SIGSYS | Chiamata di sistema errata (XSI). |
SIGTRAP | L'esecuzione del processo ha raggiunto un breakpoint (trap), il debugger può informare di questo lo sviluppatore (XSI). |
SIGURG | Sono disponibili dei dati urgenti per il processo su un socket. |
SIGVTALRM | Un conto alla rovescia impostato per il processo è terminato: misura il tempo "virtuale" consumato dal solo processo (XSI) ("virtual timer expired" (SUS)). |
SIGXCPU | Esaurito il tempo di CPU disponibile per il processo (XSI). |
SIGXFSZ | Superata la dimensione massima consentita per i file per il processo (XSI). |
Note:
- Le sezioni marcate con (XSI) denotano un'estensione delle X/Open System Interfaces.
- Le parole in lingua inglese, racchiuse tra doppi apici ed identificate da (SUS), sono citate dalla The Open Group Base Specifications Issue 6.
[modifica] Condizioni
Le seguenti condizioni possono generare un segnale:
- Quando un utente digita in un terminale delle particolari combinazioni di tasti, viene generato un segnale. Per esempio, quando viene forzata l'interruzione di un processo con CTRL + C.
- Alcune eccezioni hardware possono generare segnali: divisione per zero, accesso non valido alla memoria e così via. I programmatori alle prime armi spesso subiscono le conseguenze del segnale SIGSEGV a causa di puntatori non inizializzati oppute dereferenziati quando puntano a NULL.
- I processi possono inviare segnali a se stessi usando la chiamata di sistema
kill()
, se le autorizzazioni lo permettono. - Il kernel può generare segnali per informare i processi quando succede qualcosa di particolare. Per esempio, verrebbe sollevato un SIGPIPE se un processo tentasse di scrivere su una pipe chiusa dal processo che dovrebbe leggerla.
I segnali potrebbero, a volte, causare l'interruzione di una chiamata di sistema in corso.
[modifica] Collegamenti esterni
- (PDF) (EN) UNIX ed i segnali POSIX affidabili di Baris Simsek
Informatica | |||||
---|---|---|---|---|---|
Progetto Informatica | Portale Informatica | BarCode | |||
Categorie
|