Skip to main content

Semnal - Comandamentul Linux / Unix

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks (Aprilie 2025)

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks (Aprilie 2025)
Anonim

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.

SemnalValoareAcțiunecometariu
sau decesul procesului de control
SIGINT2TermenÎntrerupeți de la tastatură
SIGQUIT3miezIeșiți de la tastatură
SIGILL4miezInstrucțiune ilegală
SIGABRT6miezAnulați semnalul de la avorta (3)
SIGFPE8miezCu excepția punctului scurs
SIGKILL9TermenSemnalul de ucidere
SIGSEGV11miezMemorie nevalidă
SIGPIPE13TermenTeava întreruptă: scrieți în țeavă fără cititoare
SIGALRM14TermenSemnalul temporizat de la alarma (2)
SIGTERM15TermenSemnalul de terminare
SIGUSR130,10,16TermenSemnal definit de utilizator 1
SIGUSR231,12,17TermenSemnal definit de utilizator 2
SIGCHLD20,17,18IgnCopilul sa oprit sau sa terminat
SIGCONT19,18,25 Continuați dacă ați oprit
SIGSTOP17,19,23StopOpriți procesul
SIGTSTP18,20,24StopOpriți tastarea la tty
SIGTTIN21,21,26Stoptty pentru procesul de fundal
SIGTTOU22,22,27Stoptty 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.

SemnalValoareAcțiunecometariu
SIGPOLL TermenEvenimentul pollabil (Sys V). Sinonim pentru SIGIO
SIGPROF27,27,29TermenTimerul de profil a expirat
SIGSYS12,-,12miezArgument rău pentru rutină (SVID)
SIGTRAP5miezCapcana de urmărire / întrerupere
SIGURG16,23,21IgnCondiție urgentă la soclu (4.2 BSD)
SIGVTALRM26,26,28TermenCeas cu alarmă virtuală (4.2 BSD)
SIGXCPU24,24,30miezLimita de timp CPU depășită (4.2 BSD)
SIGXFSZ25,25,31miezLimita 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.

SemnalValoareAcțiunecometariu
SIGEMT7,-,7Termen
SIGSTKFLT-,16,-TermenEroare la stack pe coprocesor (neutilizată)
SIGIO23,29,22TermenI / O posibil acum (4.2 BSD)
SIGCLD-,-,18IgnUn sinonim pentru SIGCHLD
SIGPWR29,30,19TermenEroare de alimentare (Sistemul V)
SIGINFO29,-,- Un sinonim pentru SIGPWR
SIGLOST-,-,-TermenBlocarea fișierelor sa pierdut
SIGWINCH28,28,20IgnSemnal de redimensionare a ferestrei (4.3 BSD, Sun)
SIGUNUSED-,31,-TermenSemnal 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:

  1. 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.
  2. 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.
  3. 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.