Signalizačný mechanizmus v jadre Linuxu umožňuje spusteným aplikáciám asynchrónne upozorniť systém, keď nastane nová udalosť. Pre svoju povahu je tento signalizačný mechanizmus všeobecne známy ako softvérové ​​prerušenia. Rovnako ako hardvérové ​​prerušenia, signály prerušujú normálny tok aplikácie a je nepredvídateľné, kedy aplikácia prijme signál.

Poďme sa ponoriť hlboko do signalizačného mechanizmu v Linuxe a pochopiť, čo sa deje v zákulisí.

Základné koncepty signálu v Linuxe

V systéme Linux procesy generujú signály v troch základných situáciách:

  • Keď nastane výnimočná situácia na strane hardvéru. Môžete si napríklad predstaviť udalosti, ako je pokus aplikácie o prístup do regiónu mimo povolený adresný priestor (chyba segmentácie) alebo generovanie strojového kódu, ktorý obsahuje delenie nulou prevádzka.
  • Situácie, ako je použitie kombinácií kláves ako Ctrl + C alebo Ctrl + Z na konzole používateľom, zmenou veľkosti obrazovky konzoly alebo odoslaním signálu zabíjania.
  • Časovač nastavený v aplikácii vyprší, limit procesora daný aplikácii je vysoký, údaje prichádzajú do otvoreného deskriptora súboru atď.
    instagram viewer

Koncept signálov existuje už od raných verzií Unixu. Predtým existovalo niekoľko rozdielov medzi verziami Unixu, pokiaľ ide o spracovanie signálu. Neskôr s štandardizácia POSIX Linux a ďalšie deriváty Unixu sa začali riadiť týmito štandardmi. Z tohto dôvodu koncepty signálov Unix a signály POSIX, s ktorými sa môžete stretnúť v niektorých dokumentoch, poukazujú na rozdiely.

Signálne čísla

Signály majú rôzne číselné hodnoty, počnúc jednotkou. Napríklad signál 1 je a HUP signál takmer v každom systéme, alebo signál 9 je a ZABIŤ signál.

Používanie týchto čísel sa však dôrazne neodporúča, keď vo svojich aplikáciách používate signály. Pre signály POSIX, signál.h súbor by mal byť v aplikácii a vývojár by mal použiť konštantné definície súvisiacich čísel ako napr VZDYCHNUTIE, SIGKILL, atď. namiesto toho.

Ak preskúmate /usr/include/signal.h súbor vo vašom systéme, môžete vidieť ďalšie operácie a ďalšie zahrnuté súbory pohľadom na definície hodnôt, ako napr __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, atď. v súbore. Dostupné čísla signálov na systémoch Linux nájdete v /usr/include/asm-generic/signal.h súbor, ktorý nemusíte zahrnúť priamo do kódu aplikácie.

Generovanie a odosielanie signálu

Generovanie signálu nastáva v dôsledku udalosti. Odoslanie (doručenie) signálu do príslušnej aplikácie však nenastáva súčasne s generovaním signálu.

Na odoslanie signálu do aplikácie musí byť aplikácia aktuálne spustená a musí mať prostriedky CPU. K odoslaniu signálu konkrétnej aplikácii teda dochádza vtedy, keď po prepnutí kontextu začne príslušná aplikácia opäť pracovať.

Koncept čakajúci signál

Počas doby od generovania signálu po prenos signálu sú signály v pohotovostnom stave. Môžete získať prístup k počtu čakajúcich signálov a počtu čakajúcich signálov povolených pre proces z /proc/PID/status súbor.

# Pre proces s PID: 2299
cat /proc/2299/status

# Výkon
...
SigQ: 2/31630
...

Masky a blokovanie signálu

Presný čas, kedy signály dorazia, je často nepredvídateľný aplikáciou. Preto sa počas akejkoľvek operácie môžu vyskytnúť kritické prerušenia. To môže spôsobiť veľké problémy pri aplikácii vo veľkom meradle.

Aby sa predišlo niektorým nežiaducim situáciám, ako je táto, je potrebné použiť masky signálu. Takto je možné zablokovať niektoré signály pred kritickou operáciou. V tejto fáze je dôležité dokončiť kritickú časť a odstrániť definované bloky. Tento proces je niečo, čomu by mal vývojár aplikácie venovať pozornosť.

Keď aplikácia zablokuje signál, ostatné generované signály rovnakého typu budú v stave čakania, kým nebudú odblokované. V aplikácii je zabezpečené aj odosielanie čakajúcich signálov hneď po odstránení bloku.

Týmto spôsobom sa rovnaké typy signálov, ktoré boli pozastavené v čase blokovania, odosielajú do aplikácie iba raz po odstránení bloku pri bežnom používaní. Iná situácia je pri signáloch v reálnom čase.

Typy signálov systému Linux

Predvolené akcie sa môžu líšiť v závislosti od typu signálu. Ak aplikácia, ktorá prijíma príslušný signál, nemá funkciu obsluhy signálu, vykoná sa predvolená akcia. Niekedy to znamená ukončenie aplikácie a niekedy ignorovanie signálu.

Niektoré signály nie je možné zachytiť na aplikačnej vrstve, tieto signály vždy vykonajú predvolenú akciu (ako signál KILL).

Okrem niektorých akcií, ktoré spôsobia ukončenie aplikácie, sa vytvorí aj súbor výpisu jadra. Súbory s výpisom jadra, vytvorené zapísaním tabuľky virtuálnej pamäte súvisiaceho procesu na disk, pomáhajú aby používateľ preskúmal informácie o stave pred ukončením procesu pomocou nástrojov na ladenie v ďalších fázach.

Nasledujúce hodnoty sú založené na an príkladná architektúra MIPS:

Signál číslo Predvolená akcia Dá sa to chytiť?
VZDYCHNUTIE 1 Ukončite aplikáciu Áno
SIGINT 2 Ukončite aplikáciu Áno
SIGQUIT 3 Ukončiť aplikáciu (výpis jadra) Áno
SIGILL 4 Ukončiť aplikáciu (výpis jadra) Áno
SIGTRAP 5 Ukončiť aplikáciu (výpis jadra) Áno
SIGABRT 6 Ukončiť aplikáciu (výpis jadra) Áno
SIGFPE 8 Ukončiť aplikáciu (výpis jadra) Áno
SIGKILL 9 Ukončite aplikáciu nie
SIGBUS 10 Ukončiť aplikáciu (výpis jadra) Áno
SIGSEGV 11 Ukončiť aplikáciu (výpis jadra) Áno
SIGSYS 12 Ukončiť aplikáciu (výpis jadra) Áno
SIGPIPE 13 Ukončite aplikáciu Áno
SIGALRM 14 Ukončite aplikáciu Áno
SIGTERM 15 Ukončite aplikáciu Áno
SIGUSR1 16 Ukončite aplikáciu Áno
SIGUSR2 17 Ukončite aplikáciu Áno
SIGCHLD 18 Ignorovať Áno
SIGTSTP 20 Stop Áno
SIGURG 21 Ignorovať Áno
SIGPOLL 22 Ukončite aplikáciu Áno
SIGSTOP 23 Stop nie
SIGCONT 25 Pokračujte, ak ste zastavili Áno
SIGTTIN 26 Stop Áno
SIGTTOU 27 Stop Áno
SIGVTALRM 28 Ukončite aplikáciu Áno
SIGPROF 29 Ukončite aplikáciu Áno
SIGXCPU 30 Ukončiť aplikáciu (výpis jadra) Áno
SIGXFSZ 31 Ukončiť aplikáciu (výpis jadra) Áno

Životný cyklus signálov v Linuxe

Signály prechádzajú tromi fázami. Vyrábajú sa predovšetkým vo fáze výroby, jadrom alebo akýmkoľvek procesom a sú reprezentované číslom. Pracujú ľahko a rýchlo, keďže nie sú nijako extra zaťažené. Ak sa však pozriete na stranu POSIX, uvidíte, že signály v reálnom čase môžu prenášať ďalšie údaje.

Fáza dodania signálov prichádza po produkčnej fáze. Za normálnych okolností sa signály dostanú do aplikácie z jadra čo najrýchlejšie. Niekedy však aplikácie môžu blokovať signály pri vykonávaní kritických operácií. V takýchto prípadoch zostáva signál nevybavený, kým sa transakcia neuskutoční.

Podobne ako signály, aj procesy sú neoddeliteľnou súčasťou ekosystému Linuxu. Pochopenie toho, čo sú procesy a ako fungujú, je kľúčové, ak sa plánujete stať správcom systému Linux.

Čo je to proces v Linuxe?

Prečítajte si ďalej

zdieľamTweetujtezdieľamEmail

Súvisiace témy

  • Linux
  • Linuxové jadro
  • Správa systému

O autorovi

Fatih Küçükkarakurt (9 publikovaných článkov)

Inžinier a vývojár softvéru, ktorý je fanúšikom matematiky a technológií. Vždy mal rád počítače, matematiku a fyziku. Vyvinul projekty herných motorov, ako aj strojové učenie, umelé neurónové siete a knižnice lineárnej algebry. Okrem toho pokračuje v práci na strojovom učení a lineárnych matriciach.

Viac od Fatiha Küçükkarakurta

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber