Сигнал — це засіб міжпроцесної взаємодії в Unix-подібних та інших операційних системах, що сумісні зі стандартом POSIX. Сигнал являє собою асинхронне повідомлення, що посилається процесу, щоб проінформувати його про подію, яка відбулась. Коли процес отримує сигнал, операційна система перериває хід його виконання і запускає підпрограму обробки цього сигналу. Якщо в програмі явно не задана реакція на сигнал, запускається його стандартний обробник.
Відправлення сигналів
- Натискання певної комбінації клавіш в терміналі, в якому запущений процес, змушує систему відправляти певні сигнали (комбінації клавіш можна змінити командою ):
- Виклик системної функції kill(2) пошле заданий сигнал процесу, якщо дозволять права. Аналогічно команда шелла kill дозволить користувачу послати сигнал процесу. Спеціальна бібліотечна функція
raise(3)
посилає обраний сигнал поточному процесу. - , такі, як ділення на нуль чи порушення сегментації, теж генерують сигнали (тут SIGFPE та SIGSEGV відповідно, і обидва завершують роботу і зберігають дамп).
- Ядро може згенерувати сигнал, щоб повідомити процес про якусь подію. Наприклад, SIGPIPE генерується, коли процес пише у конвеєр, закритий процесом-читачем, за умовчанням це змушує процес завершити роботу.
Сигнали POSIX
Нижченаведений список документує перелік сигналів, які входять в специфікацію SUS.. Усі сигнали визначені як константи у файлі <signal.h>
. Ім'я константи складається з префіксу «SIG» та ще декількох символів, що несуть в собі визначення функції сигналу. Кожна константа має відповідний їй числовий код; числові коди можуть відрізнятися в залежності від платформи.
Сигнал | Код | Дія за умовчанням | Опис |
---|---|---|---|
SIGABRT | 6 | Д — Аварійно завершити процес з додатковими діями | Сигнал переривання процесу |
SIGALRM | 14 | 3 — Аварійно завершити процес | Сигнал, який посилається, коли спливає час, визначений alarm функцією |
SIGBUS | 10 | Д | Невірне звернення до фізичної пам'яті |
SIGCHLD | 18 | І — Ігнорувати сигнал | Дочірній процес перервано |
SIGCONT | 25 | П — Продовжити перебіг процесу | Продовжує виконання, якщо перед цим процес було зупинено. |
SIGFPE | 8 | Д | Помилкова арифметична операція. |
SIGHUP | 1 | 3 | Термінал закрито. |
SIGILL | 4 | Д | Недопустима інструкція процесора. |
SIGINT | 2 | 3 | Сигнал переривання із терміналу (Ctrl-C). |
SIGKILL | 9 | 3 | Вбити процес (не може бути оброблено або проігноровано процесом). |
SIGPIPE | 13 | 3 | Спроба записати в конвеєр за відсутності процесу приймача. |
SIGQUIT | 3 | Д | Сигнал «Quit» з терміналу (Ctrl-\). |
SIGSEGV | 11 | Д | Невірне звернення до віртуальної пам'яті. |
SIGSTOP | 23 | С — Зупинити процес | Зупинити виконання (не може бути оброблено або проігноровано процесом). |
SIGTERM | 15 | 3 | Сигнал завершення (встановлений за умовчанням для утиліти kill). |
SIGTSTP | 20 | С | Сигнал зупинки, викликаний із терміналу (Ctrl-Z). |
SIGTTIN | 26 | С | Спроба зчитування з терміналу фоновим процесом. |
SIGTTOU | 27 | С | Спроба запису на термінал фоновим процесом. |
SIGUSR1 | 16 | 3 | Сигнал користувача 1. |
SIGUSR2 | 17 | 3 | Сигнал користувача 2. |
SIGPOLL | 22 | 3 | Сигнал опитування процесу. |
SIGPROF | 29 | 3 | Таймер профілювання сплинув. |
SIGSYS | 12 | Д | Неправильний системний виклик. |
SIGTRAP | 5 | Д | Сигнал, викликаний точкою зупину або трасуванням. |
SIGURG | 21 | І | Термінові дані, доступні на сокеті. |
SIGVTALRM | 28 | З | Час на «віртуальному таймері» сплинув. |
SIGXCPU | 30 | Д | Ліміт процесорного часу перевищено. |
31 | Д | Ліміт розміру файлу перевищено. |
- Дії за умовчанням:
- З — Аварійне завершення процесу. Процес завершується таким же чином, як і функцією _exit(), за виключенням того, що статус, доступний для wait() та waitpid(), показує що процес був завершений аварійно певним сигналом.
- A — Аварійне завершення процесу. Додатково для цього сигналу можуть бути визначені дії, які виконуються в разі аварійного завершення, наприклад, вивантаження вмісту пам'яті (core dump).
- І — Не зважати на сигнал.
- С — Зупинити процес.
- П — Продовжити перебіг процесу, якщо він був перед цим зупинений; в іншому випадку не зважати на сигнал.
Обробка сигналів
Обробники сигналів можуть призначатись функцією . Якщо для певного сигналу не встановлений обробник, то використовується стандартний. В іншому випадку сигнал перехоплюється і викликається його обробник. Процес також може задавати два способи поведінки, без створення обробника: ігнорувати сигнал (SIG_IGN) та використати стандартний обробник (SIG_DFL). Є два сигнали, які не можуть бути перехопленими та обробленими: SIGKILL та SIGSTOP.
Див. також
<signal.h>
Посилання
- Інший вступ до програмування сигналів Unix
- UNIX та сигнали POSIX
- Обробники сигналів
Виноски
- IEEE Std 1003.1, 2004 Edition. Процитовано 25 травня 2011.
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Signal znachennya Signal ce zasib mizhprocesnoyi vzayemodiyi v Unix podibnih ta inshih operacijnih sistemah sho sumisni zi standartom POSIX Signal yavlyaye soboyu asinhronne povidomlennya sho posilayetsya procesu shob proinformuvati jogo pro podiyu yaka vidbulas Koli proces otrimuye signal operacijna sistema pererivaye hid jogo vikonannya i zapuskaye pidprogramu obrobki cogo signalu Yaksho v programi yavno ne zadana reakciya na signal zapuskayetsya jogo standartnij obrobnik Vidpravlennya signalivNatiskannya pevnoyi kombinaciyi klavish v terminali v yakomu zapushenij proces zmushuye sistemu vidpravlyati pevni signali kombinaciyi klavish mozhna zminiti komandoyu u deyakih utochniti starih Unix sistemah DEL nadsilaye signal INT SIGINT za umovchannyam ce zmushuye proces zavershitis posilaye signal TSTP SIGTSTP za umovchannyam ce zmushuye proces prizupiniti vikonannya posilaye signal QUIT SIGQUIT za umovchannyam ce zmushuye proces zavershiti robotu ta zberegti damp Viklik sistemnoyi funkciyi kill 2 poshle zadanij signal procesu yaksho dozvolyat prava Analogichno komanda shella kill dozvolit koristuvachu poslati signal procesu Specialna bibliotechna funkciya raise 3 posilaye obranij signal potochnomu procesu taki yak dilennya na nul chi porushennya segmentaciyi tezh generuyut signali tut SIGFPE ta SIGSEGV vidpovidno i obidva zavershuyut robotu i zberigayut damp Yadro mozhe zgeneruvati signal shob povidomiti proces pro yakus podiyu Napriklad SIGPIPE generuyetsya koli proces pishe u konveyer zakritij procesom chitachem za umovchannyam ce zmushuye proces zavershiti robotu Signali POSIXNizhchenavedenij spisok dokumentuye perelik signaliv yaki vhodyat v specifikaciyu SUS Usi signali viznacheni yak konstanti u fajli lt signal h gt Im ya konstanti skladayetsya z prefiksu SIG ta she dekilkoh simvoliv sho nesut v sobi viznachennya funkciyi signalu Kozhna konstanta maye vidpovidnij yij chislovij kod chislovi kodi mozhut vidriznyatisya v zalezhnosti vid platformi Signal Kod Diya za umovchannyam OpisSIGABRT 6 D Avarijno zavershiti proces z dodatkovimi diyami Signal pererivannya procesuSIGALRM 14 3 Avarijno zavershiti proces Signal yakij posilayetsya koli splivaye chas viznachenij alarm funkciyeyuSIGBUS 10 D Nevirne zvernennya do fizichnoyi pam yatiSIGCHLD 18 I Ignoruvati signal Dochirnij proces perervanoSIGCONT 25 P Prodovzhiti perebig procesu Prodovzhuye vikonannya yaksho pered cim proces bulo zupineno SIGFPE 8 D Pomilkova arifmetichna operaciya SIGHUP 1 3 Terminal zakrito SIGILL 4 D Nedopustima instrukciya procesora SIGINT 2 3 Signal pererivannya iz terminalu Ctrl C SIGKILL 9 3 Vbiti proces ne mozhe buti obrobleno abo proignorovano procesom SIGPIPE 13 3 Sproba zapisati v konveyer za vidsutnosti procesu prijmacha SIGQUIT 3 D Signal Quit z terminalu Ctrl SIGSEGV 11 D Nevirne zvernennya do virtualnoyi pam yati SIGSTOP 23 S Zupiniti proces Zupiniti vikonannya ne mozhe buti obrobleno abo proignorovano procesom SIGTERM 15 3 Signal zavershennya vstanovlenij za umovchannyam dlya utiliti kill SIGTSTP 20 S Signal zupinki viklikanij iz terminalu Ctrl Z SIGTTIN 26 S Sproba zchituvannya z terminalu fonovim procesom SIGTTOU 27 S Sproba zapisu na terminal fonovim procesom SIGUSR1 16 3 Signal koristuvacha 1 SIGUSR2 17 3 Signal koristuvacha 2 SIGPOLL 22 3 Signal opituvannya procesu SIGPROF 29 3 Tajmer profilyuvannya splinuv SIGSYS 12 D Nepravilnij sistemnij viklik SIGTRAP 5 D Signal viklikanij tochkoyu zupinu abo trasuvannyam SIGURG 21 I Terminovi dani dostupni na soketi SIGVTALRM 28 Z Chas na virtualnomu tajmeri splinuv SIGXCPU 30 D Limit procesornogo chasu perevisheno 31 D Limit rozmiru fajlu perevisheno Diyi za umovchannyam Z Avarijne zavershennya procesu Proces zavershuyetsya takim zhe chinom yak i funkciyeyu exit za viklyuchennyam togo sho status dostupnij dlya wait ta waitpid pokazuye sho proces buv zavershenij avarijno pevnim signalom A Avarijne zavershennya procesu Dodatkovo dlya cogo signalu mozhut buti viznacheni diyi yaki vikonuyutsya v razi avarijnogo zavershennya napriklad vivantazhennya vmistu pam yati core dump I Ne zvazhati na signal S Zupiniti proces P Prodovzhiti perebig procesu yaksho vin buv pered cim zupinenij v inshomu vipadku ne zvazhati na signal Obrobka signalivObrobniki signaliv mozhut priznachatis funkciyeyu Yaksho dlya pevnogo signalu ne vstanovlenij obrobnik to vikoristovuyetsya standartnij V inshomu vipadku signal perehoplyuyetsya i viklikayetsya jogo obrobnik Proces takozh mozhe zadavati dva sposobi povedinki bez stvorennya obrobnika ignoruvati signal SIG IGN ta vikoristati standartnij obrobnik SIG DFL Ye dva signali yaki ne mozhut buti perehoplenimi ta obroblenimi SIGKILL ta SIGSTOP Div takozh lt a href wiki Signal h title Signal h signal h a gt PosilannyaInshij vstup do programuvannya signaliv Unix UNIX ta signali POSIX Obrobniki signalivVinoskiIEEE Std 1003 1 2004 Edition Procitovano 25 travnya 2011 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi