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 | Anularea semnalului de la anulare (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 de temporizare din alarmă (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 |
Semnalele SIGKILL și SIGSTOP 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ă la și inclusiv Linux 2.2, comportamentul implicit pentru SIGSYS , SIGXCPU , SIGXFSZ și (pe alte arhitecturi decât SPARC și MIPS) SIGBUS a fost de a termina procesul (fără o dumpă de bază). (La unele alte Unices, acțiunea implicită pentru SIGXCPU și SIGXFSZ este de a termina procesul fără o memorie 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 este SIGINFO / SIGPWR pe un alfa, dar SIGLOST pe un sparc.)
SIGEMT nu este specificat în POSIX 1003.1-2001, dar nu apare niciodată în majoritatea celorlalte Unices, 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 pentru celelalte unități în care apare.
SIGIO (care nu este specificat în POSIX 1003.1-2001) este ignorat 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 ar trebui să se refere întotdeauna la semnalele în timp real, folosind notația SIGRTMIN + 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.
- În cazul în care semnalul este trimis cu ajutorul semnalului (2), se poate trimite o valoare însoțitoare (fie un număr întreg sau un indicator) cu semnalul. Dacă procesul de recepție stabilește un handler pentru acest semnal utilizând semnalizatorul SA_SIGACTION pentru sigaction (2), atunci acesta poate obține aceste date prin câmpul si_value al structurii siginfo_t trecut ca al doilea argument pentru handler. În plus, câmpurile si_pid și si_uid ale acestei structuri pot fi folosite pentru a obține PID-ul și ID-ul real al utilizatorului al procesului 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. (De exemplu, semnalele cu număr redus au cea mai mare prioritate.)
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) modificată prin intermediul fișierului / proc / sys / kernel / rtsig-max . Un fișier asociat, / proc / sys / kernel / rtsig-max , poate fi folosit pentru a afla câte semnale în timp real sunt în coada curentă.
ÎN CONFORMITATE CU
POSIX.1
Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.