Linux suportă atât semnale de încredere POSIX (în continuare "semnale standard") cât și semnale POSIX în timp real.
Semnale standard
Linux acceptă semnalele standard enumerate mai jos. Câteva numere de semnale sunt dependente de arhitectură, așa cum se indică în coloana "Valoare". (În cazul în care sunt date trei valori, prima este de obicei valabilă pentru alfa și sparc, cea medie pentru i386, ppc și sh, iar ultima pentru mips.
A - indică absența unui semnal pe arhitectura corespunzătoare.)
Înregistrările din coloana "Acțiune" din tabel specifică acțiunea implicită pentru semnal, după cum urmează:
Termen
Acțiunea prestabilită este de a termina procesul.
Ign
Acțiunea prestabilită este ignorarea semnalului.
miez
Acțiunea prestabilită este de a termina procesul și de bază de bază.
Stop
Acțiunea prestabilită este oprirea procesului.
În primul rând semnalele descrise în standardul original POSIX.1.
Semnal | Valoare | Acțiune | cometariu |
sau decesul procesului de control | |||
SIGINT | 2 | Termen | Întrerupeți de la tastatură |
SIGQUIT | 3 | miez | Ieșiți de la tastatură |
SIGILL | 4 | miez | Instrucțiune ilegală |
SIGABRT | 6 | miez | Anulați semnalul de la avorta (3) |
SIGFPE | 8 | miez | Cu excepția punctului scurs |
SIGKILL | 9 | Termen | Semnalul de ucidere |
SIGSEGV | 11 | miez | Memorie nevalidă |
SIGPIPE | 13 | Termen | Teava întreruptă: scrieți în țeavă fără cititoare |
SIGALRM | 14 | Termen | Semnalul temporizat de la alarma (2) |
SIGTERM | 15 | Termen | Semnalul de terminare |
SIGUSR1 | 30,10,16 | Termen | Semnal definit de utilizator 1 |
SIGUSR2 | 31,12,17 | Termen | Semnal definit de utilizator 2 |
SIGCHLD | 20,17,18 | Ign | Copilul sa oprit sau sa terminat |
SIGCONT | 19,18,25 | Continuați dacă ați oprit | |
SIGSTOP | 17,19,23 | Stop | Opriți procesul |
SIGTSTP | 18,20,24 | Stop | Opriți tastarea la tty |
SIGTTIN | 21,21,26 | Stop | tty pentru procesul de fundal |
SIGTTOU | 22,22,27 | Stop | tty pentru procesul de fundal |
SemnaleleSIGKILL șiSIGSTOP nu pot fi prinse, blocate sau ignorate.
În continuare semnalele nu sunt în standardul POSIX.1, dar sunt descrise în SUSv2 și SUSv3 / POSIX 1003.1-2001.
Semnal | Valoare | Acțiune | cometariu |
SIGPOLL | Termen | Evenimentul pollabil (Sys V). Sinonim pentru SIGIO | |
SIGPROF | 27,27,29 | Termen | Timerul de profil a expirat |
SIGSYS | 12,-,12 | miez | Argument rău pentru rutină (SVID) |
SIGTRAP | 5 | miez | Capcana de urmărire / întrerupere |
SIGURG | 16,23,21 | Ign | Condiție urgentă la soclu (4.2 BSD) |
SIGVTALRM | 26,26,28 | Termen | Ceas cu alarmă virtuală (4.2 BSD) |
SIGXCPU | 24,24,30 | miez | Limita de timp CPU depășită (4.2 BSD) |
SIGXFSZ | 25,25,31 | miez | Limita de dimensiune a fișierului depășită (4.2 BSD) |
Până și inclusiv Linux 2.2, comportamentul implicit pentruSIGSYS, SIGXCPU, SIGXFSZ, și (pe alte arhitecturi decât SPARC și MIPS)SIGBUS a fost de a termina procesul (fără o haldă de bază). (În alte unități, acțiunea implicită pentruSIGXCPU șiSIGXFSZ este de a termina procesul fără o dumpă de bază.) Linux 2.4 se conformează cerințelor POSIX 1003.1-2001 pentru aceste semnale, terminând procesul cu un dump de bază.
Următoarele alte semnale.
Semnal | Valoare | Acțiune | cometariu |
SIGEMT | 7,-,7 | Termen | |
SIGSTKFLT | -,16,- | Termen | Eroare la stack pe coprocesor (neutilizată) |
SIGIO | 23,29,22 | Termen | I / O posibil acum (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Un sinonim pentru SIGCHLD |
SIGPWR | 29,30,19 | Termen | Eroare de alimentare (Sistemul V) |
SIGINFO | 29,-,- | Un sinonim pentru SIGPWR | |
SIGLOST | -,-,- | Termen | Blocarea fișierelor sa pierdut |
SIGWINCH | 28,28,20 | Ign | Semnal de redimensionare a ferestrei (4.3 BSD, Sun) |
SIGUNUSED | -,31,- | Termen | Semnal neutilizat (va fi SIGSYS) |
(Semnalul 29 esteSIGINFO / SIGPWR pe un alfa darSIGLOST pe un sparc.)
SIGEMT nu este specificată în POSIX 1003.1-2001, dar nu apare niciodată în majoritatea celorlalte unități, unde acțiunea implicită este, de obicei, de a termina procesul cu un dump de bază.
SIGPWR (care nu este specificat în POSIX 1003.1-2001) este, de obicei, ignorată în mod prestabilit pe celelalte unități în care apare.
SIGIO (care nu este specificat în POSIX 1003.1-2001) este ignorat în mod implicit în mai multe unități.
Semnale în timp real
Linux suportă semnale în timp real, așa cum a fost definit inițial în extensiile POSIX.4 în timp real (și acum incluse în POSIX 1003.1-2001). Linux suportă 32 de semnale în timp real, numerotate de la 32 (SIGRTMIN) la 63 (SIGRTMAX). (Programele trebuie să se refere întotdeauna la semnale în timp real folosind notațiaSIGRTMIN+ n, deoarece intervalul de numere de semnale în timp real variază între Unices.)
Spre deosebire de semnalele standard, semnalele în timp real nu au semnificații predefinite: întregul set de semnale în timp real poate fi utilizat în scopuri definite de aplicație. (Rețineți însă că implementarea LinuxThreads utilizează primele trei semnale în timp real.)
Acțiunea prestabilită pentru un semnal în timp real nefolosit este terminarea procesului de primire.
Semnalele în timp real se disting prin următoarele:
- Mai multe instanțe ale semnalelor în timp real pot fi plasate în coadă. Prin contrast, dacă sunt difuzate mai multe instanțe ale unui semnal standard în timp ce semnalul este blocat în prezent, atunci doar o instanță este în coada de așteptare.
- Dacă semnalul este trimis cu ajutorulsigqueue(2), o valoare de însoțire (fie un număr întreg sau un pointer) poate fi trimisă cu semnalul. Dacă procesul de recepție stabilește un handler pentru acest semnal folosindSA_SIGACTION pavilion lasigaction(2), atunci poate obține aceste date prin si_value câmpul siginfo_t structura a trecut ca argumentul celui de-al doilea la rândul său. Mai mult decât atât, si_pid și si_uid câmpurile acestei structuri pot fi folosite pentru a obține codul PID și ID-ul real al utilizatorului pentru procesul de trimitere a semnalului.
- Semnalele în timp real sunt livrate într-o ordine garantată. Sunt transmise mai multe semnale în timp real de același tip în ordinea în care au fost trimise. Dacă sunt transmise diferite semnale în timp real unui proces, acestea sunt livrate începând cu semnalul cu cel mai mic număr. (Adică semnale cu număr redus au prioritate maximă).
Dacă se așteaptă semnale standard și în timp real pentru un proces, POSIX îl lasă nespecificat care este livrat mai întâi. Linux, ca multe alte implementări, acordă prioritate semnalelor standard în acest caz.
Potrivit POSIX, o implementare ar trebui să permită cel puțin _POSIX_SIGQUEUE_MAX (32) semnale în timp real să fie în coadă într-un proces. Cu toate acestea, în loc să plaseze o limită per proces, Linux impune o limită la nivel de sistem pentru numărul de semnale în timp real în coadă pentru toate procesele.
Această limită poate fi vizualizată (și cu privilegiu) schimbată prin / Proc / sys / kernel / rtsig-max fişier. Un dosar asociat, / Proc / sys / kernel / rtsig-max , pot fi folosite pentru a afla câte semnale în timp real sunt în coada curentă.
ÎN CONFORMITATE CU
POSIX.1
Important: Folosește om comandă ( % om ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.