Signalas - Linux / Unix komanda

Linux palaiko tiek POSIX patikimus signalus (toliau - standartiniai signalai), tiek POSIX realaus laiko signalus.

Standartiniai signalai

Linux palaiko toliau nurodytus standartinius signalus. Keli signalų skaičiai priklauso nuo architektūros, kaip nurodyta stulpelyje "Vertė". (Kai pateikiamos trys vertės, pirmasis paprastai galioja alfa ir sparc, vidutinis i386, ppc ir sh, o paskutinis - mips.

A - reiškia, kad atitinkamoje architektūroje nėra signalo.)

Lentelės stulpelyje "Veiksmas" įrašai nurodo numatytą signalo veiksmą, kaip nurodyta toliau:

Terminas

Numatytasis veiksmas yra nutraukti procesą.

Ignas

Numatytasis veiksmas yra ignoruoti signalą.

Branduolys

Numatytasis veiksmas - nutraukti procesą ir išmesti šerdį.

Sustabdyti

Numatytasis veiksmas - sustabdyti procesą.

Pirmasis signalas aprašytas pradiniame POSIX.1 standarto.

Signalas Vertė Veiksmas Komentaras
ar kontrolės proceso mirtis
SIGINT 2 Terminas Pertrauka iš klaviatūros
SIGQUIT 3 Branduolys Baigti klaviatūrą
SIGILL 4 Branduolys Neteisėta instrukcija
SIGABRT 6 Branduolys Nutraukti signalą nutraukti (3)
SIGFPE 8 Branduolys Išimtis iš plūduriuojančio taško
SIGKILL 9 Terminas Nužudyti signalą
SIGSEGV 11 Branduolys Netinkama atminties nuoroda
SIGPIPE 13 Terminas Skaldytas vamzdis: rašykite vamzdžiui be skaitytuvo
SIGALRM 14 Terminas Signalo laikmatis (2)
SIGTERM 15 Terminas Nutraukimo signalas
SIGUSR1 30,10,16 Terminas Vartotojo nustatytas signalas 1
SIGUSR2 31,12,17 Terminas Vartotojo nustatytas signalas 2
SIGCHLD 20,17,18 Ignas Vaikas sustojo ar nutraukė
SIGCONT 19,18,25 Tęsti, jei sustojo
SIGSTOP 17,19,23 Sustabdyti Sustoti procesas
SIGTSTP 18,20,24 Sustabdyti Sustabdykite įvedę į tty
SIGTTIN 21,21,26 Sustabdyti tty įvestis fono procesui
SIGTTOU 22,22,27 Sustabdyti tty išėjimas fono procesui

Signalai SIGKILL ir SIGSTOP negali būti sugauti, užblokuoti arba ignoruoti.

Kitas signalai nėra POSIX.1 standarte, bet aprašyti SUSv2 ir SUSv3 / POSIX 1003.1-2001.

Signalas Vertė Veiksmas Komentaras
SIGPOLL Terminas Užsikrečiama įvykis (Sys V). SIGIO sinonimas
SIGPROF 27,27,29 Terminas Profilio laikmatis pasibaigė
SIGSYS 12, -, 12 Branduolys Blogas argumentas įprastam (SVID)
SIGTRAP 5 Branduolys Trace / stoppoint spąstai
SIGURG 16,23,21 Ignas Skubos būklė prie lizdo (4.2 BSD)
SIGVTALRM 26,26,28 Terminas Virtuali žadintuvas (4.2 BSD)
SIGXCPU 24,24,30 Branduolys Procesoriaus laikas viršytas (4.2 BSD)
SIGXFSZ 25,25,31 Branduolys Viršytas failo dydis (4.2 BSD)

Iki "Linux 2.2", įskaitant numatytąsias " SIGSYS" , " SIGXCPU" , " SIGXFSZ" ir (kitų architektūrų, išskyrus SPARC ir MIPS) veikimą, "SIGBUS" turėjo nutraukti procesą (be šerdies). (Kai kuriuose kitose "Unices" numatytasis veiksmas SIGXCPU ir SIGXFSZ yra nutraukti procesą be pagrindinio duomenų išvedimo.) Linux 2.4 atitinka šiuos signalus taikomų POSIX 1003.1-2001 reikalavimų, nutraukiant procesą su pagrindine išlaida.

Kitas įvairūs kiti signalai.

Signalas Vertė Veiksmas Komentaras
SIGEMT 7, -, 7 Terminas
SIGSTKFLT -, 16, - Terminas Kopprocesoriaus kamino gedimas (nepanaudotas)
SIGIO 23,29,22 Terminas I / O dabar galimas (4.2 BSD)
SIGCLD -, -, 18 Ignas SIGCHLD sinonimas
SIGPWR 29,30,19 Terminas Maitinimo gedimas (V sistema)
SIGINFO 29, -, - SIGPWR sinonimas
SIGLOST -, -, - Terminas Failo užraktas prarastas
SIGWINCH 28,28,20 Ignas Lango dydžio signalo keitimas (4.3 BSD, Sun)
SIGUNUSED -, 31, - Terminas Nepanaudotas signalas (bus SIGSYS)

(Signalas 29 yra SIGINFO / SIGPWR alfa, bet SIGLOST sparc.)

SIGEMT nenurodytas POSIX 1003.1-2001, bet beveik visose Unices atrodo beviltiška, o jo numatytasis veiksmas paprastai nutraukia procesą su pagrindine išlaida.

SIGPWR (kuris nenurodytas POSIX 1003.1-2001) paprastai yra ignoruojamas tuos kitus Unices, kur jis pasirodo.

SIGIO (kuris nenurodytas POSIX 1003.1-2001) pagal numatytuosius nustatymus yra ignoruojamas keliose kitose "Unices".

Realaus laiko signalai

"Linux" palaiko realaus laiko signalus, kaip iš pradžių apibrėžta realiuoju laiku pratęsimų POSIX.4 (ir dabar įtraukta į POSIX 1003.1-2001). "Linux" palaiko 32 realaus laiko signalus, sunumeruotus nuo 32 ( SIGRTMIN ) iki 63 ( SIGRTMAX ). (Programos visada turėtų būti susijusios su realaus laiko signalais, naudojant žymėjimą SIGRTMIN + n, nes realaus laiko signalų skaičių diapazonas skiriasi visose Uniceose.)

Skirtingai nuo standartinių signalų, realaus laiko signalai neturi iš anksto apibrėžtų reikšmių: visą realaus laiko signalų rinkinį galima naudoti apibrėžtiems tikslams. (Tačiau atkreipkite dėmesį, kad įgyvendinant "LinuxThreads" naudojami pirmieji trys realaus laiko signalai.)

Numatytasis veiksmas dėl nevaldyto realaus laiko signalo yra nutraukti priėmimo procesą.

Realaus laiko signalai skiriasi šiais būdais:

  1. Kelių realaus laiko signalų pavyzdžiai gali būti rodomi. Priešingai, jei tuo metu, kai šis signalas šiuo metu yra užblokuotas, pateikiami keli standartinio signalo atvejai, tada tik vienas egzempliorius yra eilėje.
  2. Jei signalas siunčiamas naudojant sigqueue (2), kartu su signalu gali būti siunčiama papildoma vertė (arba sveikasis skaičius ar rodyklė). Jei priėmimo procesas nustato šio signalo tvarkytoją, naudojant SA_SIGACTION vėliavą į sigaction (2), jis gali gauti šiuos duomenis per siginfo_t struktūros si_valuomenų lauką, kuris perduodamas kaip antrasis argumentas tvarkytojui. Be to, šios struktūros si_pid ir si_uid laukai gali būti naudojami norint gauti signalo siuntimo proceso PID ir realų naudotojo ID.
  3. Realaus laiko signalai pristatomi garantuota tvarka. Keli vienodo tipo realaus laiko signalai pristatomi taip, kaip jie buvo išsiųsti. Jei procesui siunčiami skirtingi realaus laiko signalai, jie pristatomi pradedant nuo mažiausio skaičiaus signalo. (Ty, žemos kokybės signalai yra aukščiausio prioriteto.)

Jei procesas laukia tiek standartinių, tiek realaus laiko signalų, POSIX palieka tai nenustatyta, kuri pirmiausia pristatoma. Linux, kaip ir daugelis kitų diegimų, šiuo atveju pirmenybę teikia standartiniams signalams.

Pasak "POSIX", įgyvendinant turėtų būti leidžiama bent jau _POSIX_SIGQUEUE_MAX (32) realaus laiko signalus būti eiliški procesui. Tačiau, užuot nustatę kiekvieno proceso apribojimą, "Linux" nustato viso proceso ribų eilėje esančių realaus laiko signalų skaičių visuose procesuose.

Ši riba gali būti peržiūrima (ir su privilegija), pakeista per failą / proc / sys / kernel / rtsig-max . Susijęs failas, / proc / sys / kernel / rtsig-max , gali būti naudojamas norint išsiaiškinti, kiek realiojo laiko signalų šiuo metu yra eilėje.

Atitikti

POSIX.1

Svarbu: naudokite komandą man ( % man ), kad pamatytumėte, kaip komanda naudojama jūsų konkrečiame kompiuteryje.