Sinjal - Komanda Linux / Unix

Linux mbështet të dy sinjalet POSIX të besueshme (më tej "sinjalet standarde") dhe POSIX sinjale në kohë reale.

Sinjalet standarde

Linux mbështet sinjalet standarde të listuara më poshtë. Disa shenja sinjalesh varen nga arkitektura, siç tregohet në kolonën "Vlera". (Ku jepen tre vlera, i pari është zakonisht i vlefshëm për alfa dhe sparc, i mesëm për i386, ppc dhe sh, dhe i fundit për mips.

A - tregon se një sinjal mungon në arkitekturën korresponduese.)

Shënimet në kolonën "Veprimi" të tabelës përcaktojnë veprimin e parazgjedhur të sinjalit, si më poshtë:

afat

Veprimi i parazgjedhur është të përfundojë procesin.

IGN

Veprimi i parazgjedhur është të shpërfill sinjalin.

Bërthamë

Veprimi i parazgjedhur është mbyllja e procesit dhe deponimi i bërthamës.

stop

Veprimi i parazgjedhur është ndalimi i procesit.

Së pari sinjalet e përshkruara në standardin origjinal POSIX.1.

sinjal vlerë veprim koment
ose vdekjen e procesit të kontrollit
SIGINT 2 afat Ndërprite nga tastiera
SIGQUIT 3 Bërthamë Lëvizni nga tastiera
SIGILL 4 Bërthamë Udhëzim i paligjshëm
SIGABRT 6 Bërthamë Abortoni sinjal nga ndërprerja (3)
SIGFPE 8 Bërthamë Përjashtim nga pikat lundruese
SIGKILL 9 afat Vrasni sinjalin
SIGSEGV 11 Bërthamë Referenca e pavlefshme e kujtesës
SIGPIPE 13 afat Tub i thyer: shkruaj në tub pa lexues
SIGALRM 14 afat Sinjali i kohëmatësit nga alarmi (2)
SIGTERM 15 afat Sinjali i përfundimit
SIGUSR1 30,10,16 afat Sinjali i përcaktuar nga përdoruesi 1
SIGUSR2 31,12,17 afat Sinjali i përcaktuar nga përdoruesi 2
SIGCHLD 20,17,18 IGN Fëmija ndaloi ose përfundoi
SIGCONT 19,18,25 Vazhdoni nëse jeni ndalur
SIGSTOP 17,19,23 stop Ndaloni procesin
SIGTSTP 18,20,24 stop Stop typed në tty
SIGTTIN 21,21,26 stop input tty për procesin e sfondit
SIGTTOU 22,22,27 stop prodhimit tty për procesin e sfondit

Sinjalet SIGKILL dhe SIGSTOP nuk mund të kapen, bllokohen ose injorohen.

Pastaj sinjalet nuk janë në standardin POSIX.1 por përshkruhen në SUSv2 dhe SUSv3 / POSIX 1003.1-2001.

sinjal vlerë veprim koment
SIGPOLL afat Ngjarje pollable (Sys V). Sinonim i SIGIO
SIGPROF 27,27,29 afat Kohëmatësi i profilizimit skadoi
SIGSYS 12 - 12 Bërthamë Argument i keq për rutinën (SVID)
SIGTRAP 5 Bërthamë Gjurmë në gjurmët e trapeve
SIGURG 16,23,21 IGN Gjendja urgjente në fole (4.2 BSD)
SIGVTALRM 26,26,28 afat Ora virtuale me alarm (4.2 BSD)
SIGXCPU 24,24,30 Bërthamë Kufiri i kohës së CPU-së u tejkalua (4.2 BSD)
SIGXFSZ 25,25,31 Bërthamë Kufiri i madhësisë së dokumentit u tejkalua (4.2 BSD)

Deri në dhe duke përfshirë Linux 2.2, sjellja e parazgjedhur për SIGSYS , SIGXCPU , SIGXFSZ dhe (në arkitekturë të ndryshëm nga SPARC dhe MIPS) SIGBUS do të përfundonte procesin (pa një depon bazë). (Në disa Unices tjera veprimi i parazgjedhur për SIGXCPU dhe SIGXFSZ është të përfundojë procesin pa një depon bazë.) Linux 2.4 përputhet me kërkesat POSIX 1003.1-2001 për këto sinjale, duke e përfunduar procesin me një depon bazë.

Sinjalet e ardhshme të ndryshme.

sinjal vlerë veprim koment
SIGEMT 7, -, 7 afat
SIGSTKFLT -, 16, - afat Gabim në grumbull në koprocesor (i papërdorur)
SIGIO 23,29,22 afat I / O tani e mundur (4.2 BSD)
SIGCLD -, -, 18 IGN Sinonim për SIGCHLD
SIGPWR 29,30,19 afat Dështimi i rrymës (Sistemi V)
SIGINFO 29 -, - Sinonim për SIGPWR
SIGLOST -, -, - afat Bllokohet dosja e humbur
SIGWINCH 28,28,20 IGN Dritarja e resize sinjal (4.3 BSD, Sun)
SIGUNUSED -, 31, - afat Sinjal i papërdorur (do të jetë SIGSYS)

(Sinjali 29 është SIGINFO / SIGPWR në një alfa por SIGLOST në një sparc.)

SIGEMT nuk është specifikuar në POSIX 1003.1-2001, por gjithsesi duket në shumicën e Unices të tjera, ku veprimi i tij i zakonshëm është zakonisht për të përfunduar procesin me një depon bazë.

SIGPWR (i cili nuk është specifikuar në POSIX 1003.1-2001) zakonisht injorohet sipas parazgjedhjes në ato Unices ku shfaqet.

SIGIO (i cili nuk është specifikuar në POSIX 1003.1-2001) është injoruar nga default në disa Unices të tjera.

Sinjalet në kohë reale

Linux mbështet sinjale në kohë reale siç është përcaktuar fillimisht në extensions POSIX.4 në kohë reale (dhe tani është përfshirë në POSIX 1003.1-2001). Linux mbështet 32 ​​sinjale në kohë reale, të numëruara nga 32 ( SIGRTMIN ) në 63 ( SIGRTMAX ). (Programet duhet t'i referohen gjithmonë sinjaleve në kohë reale duke përdorur sinjalizimin SIGRTMIN + n, meqë sfera e numrave të sinjalit në kohë reale ndryshon nga Unices.)

Ndryshe nga sinjalet standarde, sinjalet në kohë reale nuk kanë kuptime të paracaktuara: të gjithë sinjalet në kohë reale mund të përdoren për qëllime të përcaktuara nga aplikimi. (Vini re, megjithatë, se zbatimi i LinuxThreads përdor tre sinjalet e para në kohë reale.)

Veprimi i parazgjedhur për një sinjal të pashembullt në kohë reale është ndërprerja e procesit të pranimit.

Sinjalet në kohë reale dallohen nga:

  1. Shembuj të shumëfishta të sinjaleve në kohë reale mund të jenë në radhë. Në të kundërt, nëse paraqiten raste të shumta të një sinjali standard, ndërkohë që sinjali është aktualisht i bllokuar, atëherë vetëm një rast është në radhë.
  2. Nëse sinjali është dërguar duke përdorur sigueue (2), një sinjal mund të dërgohet një vlerë shoqëruese (ose një numër i plotë ose një tregues). Nëse procesi i marrjes krijon një mbajtës për këtë sinjal duke përdorur flamurin SA_SIGACTION për sigaction (2) atëherë ai mund të marrë këto të dhëna nëpërmjet fushës si_value të strukturës siginfo_t të kaluar si argumenti i dytë tek mbajtësi. Për më tepër, fushat si_pid dhe si_uid të kësaj strukture mund të përdoren për të marrë PID dhe ID të vërtetë të përdoruesit të procesit që dërgon sinjalin.
  3. Sinjalet në kohë reale dërgohen në një mënyrë të garantuar. Sinjalet e shumëfishta në kohë reale të të njëjtit lloj janë dorëzuar sipas porosisë së tyre. Nëse sinjale të ndryshme në kohë reale dërgohen në një proces, ato dorëzohen duke filluar me sinjalin me numër më të ulët. (Dmth, sinjalet me numër të ulët kanë përparësi më të lartë.)

Nëse të dy sinjalet standarde dhe në kohë reale janë në pritje për një proces, POSIX e lë atë të paspecifikuar që dërgohet së pari. Linux, si shumë implementime të tjera, u jep prioritet sinjaleve standarde në këtë rast.

Sipas POSIX, një implementim duhet të lejojë të paktën _POSIX_SIGQUEUE_MAX (32) sinjale në kohë reale të jenë në radhë në një proces. Sidoqoftë, në vend që të vendoset një limit për-proces, Linux imponon një kufi të gjerë të sistemit në numrin e sinjaleve në kohë reale në radhë për të gjitha proceset.

Ky limit mund të shihet (dhe me privilegje) të ndryshuar nëpërmjet skedarit / proc / sys / kernel / rtsig-max . Një skedar i lidhur, / proc / sys / kernel / rtsig-max , mund të përdoret për të zbuluar sa sinjale në kohë reale janë aktualisht në radhë.

PËRCAKTIMI PËR

POSIX.1

E rëndësishme: Përdorni komandën e njeriut ( % man ) për të parë se si përdoret një komandë në kompjuterin tuaj të veçantë.