Сігналы (UNIX)
From Wikipedia, the free encyclopedia
Remove ads
Сігналы ў UNIX, Unix-падобных і іншых POSIX-сумяшчальных аперацыйных сістэмах з’яўляюцца адным з сродкаў узаемадзеяння паміж працэсамі (англ.: IPC, inter-process communication). Фактычна, сігнал — гэта асінхроннае паведамленне працэсу аб якой-небудзь падзеі. Калі сігнал дасланы працэсу, аперацыйная сістэма прыпыняе выконванне працэсу. Калі працэс усталяваў уласны апрацоўшчык сігналу, аперацыйная сістэма запускае гэты апрацоўшчык, перадаўшы яму інфармацыю аб сігнале. Калі працэс не ўсталяваў апрацоўшчык, то выконваецца апрацоўшчык па змоўчванню.
Назвы сігналаў «SIG…» з’яўляюцца лікавымі канстантамі (макравызначэннямі Сі) са значэннямі, якія вызначаюцца ў загалоўкавым файле signal.h
. Лікавыя значэнні сігналаў могуць адрознівацца ў розных сістэмах, хоць асноўная іх частка мае ў розных сістэмах адны і тыя ж значэнні. Утыліта kill
дазваляе задаваць сігнал як лічбай, так і сімвальным пазначэннем.
Remove ads
Пасылка сігналаў
Сігналы дасылаюцца:
- з тэрмінала, націсканнем спецыяльных клавіш ці іх камбінацый (напрыклад, націсканне Ctrl-C генеруе SIGINT, а Ctrl-Z SIGTSTP);
- ядром сістэмы:
- пры ўзнікненні апаратных выключэнняў (недапушчальных інструкцый, парушэннях пры звяртанні ў памяць, сістэмных збоях і г. д.);
- пры памылковых сістэмных выкліках;
- для інфармавання аб падзеях увода-вывада;
- адным працэсам другому (ці самому сабе), з дапамогай сістэмнага выкліку
kill()
, у тым ліку:- з каманднага радка, утылітай
/bin/kill
.
- з каманднага радка, утылітай
Сігналы не могуць быць дасланы працэсу, які завяршыўся і знаходзіцца ў стане «зомбі».
Remove ads
Апрацоўка сігналаў
Апрацоўшчык па змоўчванню для большасці сігналаў завяршае выкананне працэсу. Для альтэрнатыўнай апрацоўкі ўсіх сігналаў, за выключэннем SIGKILL і SIGSTOP, працэс можа вызначыць свой апрацоўшчык ці ігнараваць іх узнікненне мадыфікаваннем сваёй сігнальнай маскі.
Бяспека
Працэс (ці карыстальнік з шэла) з эфектыўным UID, не роўным 0 (UID суперкарыстальніка), можа дасылаць сігналы толькі працэсам з тым жа UID.
Класіфікацыя сігналаў
POSIX вызначае 28 сігналаў, якія можна класіфікаваць наступным чынам:
Пры апрацоўцы выключных сітуацый і адладкавых сігналаў перад завяршэннем працэс можа запісаць у бягучы каталог файл з дампам памяці працэсу (англ.: core image), з дапамогай якога, адладчык можа узнавіць умовы, пры якіх узнікла дадзеная выключная сітуацыя. Часам (напрыклад, для праграм, якія выконваюцца ад імя суперкарысальніка) дамп памяці не ствараецца з меркавання бяспекі.
Remove ads
SA_SIGINFO
Звычайна апрацоўшчык сігналу атрымоўвае толькі адзін аргумент — нумар сігналу (гэта дазваляе ужываць адну функцыю-апрацоўшчык для некалькіх сігналаў). Калі пры заданні апрацоўшчыка сігналу (функцыяй sigaction()
) указаць опцыю SA_SIGINFO, то ў апрацоўшчык будуць перададзены яшчэ два аргументы:
- указальнік на структуру
siginfo_t
, якая мае ў складзе:- бітавая маска дадатковых «кодаў сігналу», што вызначае прычыну яго ўзнікнення;
- ідэнтыфікатар працэсу (PID), які даслаў сігнал;
- эфектыўны ідэнтыфікатар карыстальніка (UID), ад імя якога выконваецца працэс (напрыклад, утыліта
kill
), якая даслала сігнал; - адрас інструкцыі, у якой узнікла выключэнне;
- і г. д.
- указальнік на «машынны кантэкст» на момант узнікнення сігналу (са «стэкам сігналу» — дадатковымі данымі, якія змяшчаюцца ў стэк пры выкліку некаторых сігналаў-выключэнняў).
Большасць дадатковых кодаў спецыфічныя для кожнага сігналу. Коды, агульныя для ўсіх сігналаў:
Remove ads
Гл. таксама
Спасылкі
- Signal Concepts (англ.) — Канцэпцыя сігналаў (IEEE Std 1003.1, 2004 Edition)
- signal.h (англ.) — Апісанне структур і канстантаў, звязаных з сігналамі (IEEE Std 1003.1, 2004 Edition)
- Правила использования сигналов в Unix (руск.) — «Правила игры в сигналы Unix» (Сообщение в конференции RU.UNIX.PROG)
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads