Linux supporta sia segnali POSIX affidabili (in seguito "segnali standard") che POSIX in tempo reale.
Segnali standard
Linux supporta i segnali standard elencati di seguito. Diversi numeri di segnale dipendono dall'architettura, come indicato nella colonna "Valore". (Dove sono indicati tre valori, il primo è generalmente valido per alpha e sparc, quello centrale per i386, ppc e sh e l'ultimo per i mips.
A - indica che un segnale è assente sull'architettura corrispondente.)
Le voci nella colonna "Azione" della tabella specificano l'azione predefinita per il segnale, come segue:
Termine
L'azione predefinita è terminare il processo.
Ign
L'azione predefinita è ignorare il segnale.
Nucleo
L'azione predefinita è terminare il processo e eseguire il dump core.
Stop
L'azione predefinita è interrompere il processo.
Innanzitutto i segnali descritti nello standard POSIX.1 originale.
Segnale | Valore | Azione | Commento |
o morte del processo di controllo | |||
SIGINT | 2 | Termine | Interrompere dalla tastiera |
SIGQUIT | 3 | Nucleo | Esci dalla tastiera |
SIGILL | 4 | Nucleo | Istruzione illegale |
SIGABRT | 6 | Nucleo | Segnale di interruzione da abortire (3) |
SIGFPE | 8 | Nucleo | Eccezione a virgola mobile |
SIGKILL | 9 | Termine | Uccidere il segnale |
SIGSEGV | 11 | Nucleo | Riferimento di memoria non valido |
SIGPIPE | 13 | Termine | Tubo rotto: scrivere alla pipe senza lettori |
SIGALRM | 14 | Termine | Segnale del timer da allarme (2) |
SIGTERM | 15 | Termine | Segnale di terminazione |
SIGUSR1 | 30,10,16 | Termine | Segnale definito dall'utente 1 |
SIGUSR2 | 31,12,17 | Termine | Segnale definito dall'utente 2 |
SIGCHLD | 20,17,18 | Ign | Bambino fermato o terminato |
SIGCONT | 19,18,25 | Continua se fermato | |
SIGSTOP | 17,19,23 | Stop | Interrompere il processo |
SIGTSTP | 18,20,24 | Stop | Smetti di digitare su tty |
SIGTTIN | 21,21,26 | Stop | input tty per processo in background |
SIGTTOU | 22,22,27 | Stop | uscita tty per processo in background |
I segnaliSIGKILL eSIGSTOP non può essere catturato, bloccato o ignorato.
Quindi i segnali non sono nello standard POSIX.1 ma descritti in SUSv2 e SUSv3 / POSIX 1003.1-2001.
Segnale | Valore | Azione | Commento |
SIGPOLL | Termine | Evento pollable (Sys V). Sinonimo di SIGIO | |
SIGPROF | 27,27,29 | Termine | Timer di profilazione scaduto |
SIGSYS | 12,-,12 | Nucleo | Argomento non valido nella routine (SVID) |
SIGTRAP | 5 | Nucleo | Traccia / trappola breakpoint |
SIGURG | 16,23,21 | Ign | Condizione urgente sul socket (4.2 BSD) |
SIGVTALRM | 26,26,28 | Termine | Sveglia virtuale (4.2 BSD) |
SIGXCPU | 24,24,30 | Nucleo | Limite di tempo della CPU superato (4.2 BSD) |
SIGXFSZ | 25,25,31 | Nucleo | Limite dimensioni file superato (4,2 BSD) |
Fino a Linux Linux incluso, il comportamento predefinito perSIGSYS, SIGXCPU, SIGXFSZe (su architetture diverse da SPARC e MIPS)SIGBUS doveva terminare il processo (senza un core dump). (Su alcuni Unices l'azione predefinita perSIGXCPU eSIGXFSZ è terminare il processo senza un core dump.) Linux 2.4 è conforme ai requisiti POSIX 1003.1-2001 per questi segnali, terminando il processo con un core dump.
Successivamente vari altri segnali.
Segnale | Valore | Azione | Commento |
SIGEMT | 7,-,7 | Termine | |
SIGSTKFLT | -,16,- | Termine | Errore di stack sul coprocessore (non utilizzato) |
SIGIO | 23,29,22 | Termine | I / O ora possibile (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Un sinonimo per SIGCHLD |
SIGPWR | 29,30,19 | Termine | Interruzione di corrente (sistema V) |
SIGINFO | 29,-,- | Un sinonimo per SIGPWR | |
SIGLOST | -,-,- | Termine | Blocco file perso |
SIGWINCH | 28,28,20 | Ign | Segnale di ridimensionamento finestra (4.3 BSD, Sun) |
SIGUNUSED | -,31,- | Termine | Segnale inutilizzato (sarà SIGSYS) |
(Il segnale 29 èSIGINFO / SIGPWR su un alfa maSIGLOST su uno sparc.)
SIGEMT non è specificato in POSIX 1003.1-2001, ma appare sempre sulla maggior parte degli altri Unix, dove la sua azione predefinita è tipicamente quella di terminare il processo con un core dump.
SIGPWR (che non è specificato in POSIX 1003.1-2001) viene generalmente ignorato di default su quegli altri Unix in cui appare.
SIGIO (che non è specificato in POSIX 1003.1-2001) viene ignorato per impostazione predefinita su diversi altri Unix.
Segnali in tempo reale
Linux supporta i segnali in tempo reale come originariamente definiti nelle estensioni in tempo reale POSIX.4 (e ora inclusi in POSIX 1003.1-2001). Linux supporta 32 segnali in tempo reale, numerati da 32 (SIGRTMIN) a 63 (SIGRTMAX). (I programmi dovrebbero sempre fare riferimento ai segnali in tempo reale usando la notazioneSIGRTMIN+ n, poiché la gamma di numeri di segnale in tempo reale varia da Unix.)
A differenza dei segnali standard, i segnali in tempo reale non hanno significati predefiniti: l'intero set di segnali in tempo reale può essere utilizzato per scopi definiti dall'applicazione. (Si noti, tuttavia, che l'implementazione di LinuxThreads utilizza i primi tre segnali in tempo reale.)
L'azione predefinita per un segnale in tempo reale non gestito è terminare il processo di ricezione.
I segnali in tempo reale si distinguono come segue:
- È possibile mettere in coda più istanze di segnali in tempo reale. Al contrario, se vengono recapitate più istanze di un segnale standard mentre quel segnale è attualmente bloccato, solo una istanza viene accodata.
- Se il segnale viene inviato utilizzandosigqueue(2), un valore di accompagnamento (un numero intero o un puntatore) può essere inviato con il segnale. Se il processo di ricezione stabilisce un gestore per questo segnale utilizzando ilSA_SIGACTION bandiera asigaction(2) quindi può ottenere questi dati tramite il si_value campo del siginfo_t struttura passata come secondo argomento al gestore. Inoltre, il si_pid e si_uid i campi di questa struttura possono essere utilizzati per ottenere il PID e l'ID utente reale del processo che invia il segnale.
- I segnali in tempo reale vengono consegnati in un ordine garantito. Più segnali in tempo reale dello stesso tipo vengono consegnati nell'ordine in cui sono stati inviati. Se diversi segnali in tempo reale vengono inviati a un processo, vengono consegnati a partire dal segnale con il numero più basso. (I.e, i segnali di basso numero hanno la massima priorità).
Se entrambi i segnali standard e in tempo reale sono in attesa di un processo, POSIX lascia non specificato che viene consegnato per primo. Linux, come molte altre implementazioni, dà la priorità ai segnali standard in questo caso.
Secondo POSIX, un'implementazione dovrebbe consentire almeno _POSIX_SIGQUEUE_MAX (32) segnali in tempo reale da accodare a un processo. Tuttavia, anziché porre un limite per processo, Linux impone un limite a livello di sistema sul numero di segnali in tempo reale in coda per tutti i processi.
Questo limite può essere visualizzato (e con privilegio) modificato tramite / Proc / sys / kernel / rtsig-max file. Un file correlato, / Proc / sys / kernel / rtsig-max , può essere utilizzato per scoprire quanti segnali in tempo reale sono attualmente in coda.
CONFORME A
POSIX.1
Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico.