The page has not been checked
Сігналы ўUNIX,Unix-падобных і іншыхPOSIX-сумяшчальныхаперацыйных сістэмах з’яўляюцца адным з сродкаўузаемадзеяння паміж працэсамі (англ.:IPC, inter-process communication). Фактычна, сігнал — гэта асінхроннае паведамленне працэсу аб якой-небудзь падзеі. Калі сігнал дасланы працэсу, аперацыйная сістэма прыпыняе выконванне працэсу. Калі працэс усталяваў уласныапрацоўшчык сігналу, аперацыйная сістэма запускае гэты апрацоўшчык, перадаўшы яму інфармацыю аб сігнале. Калі працэс не ўсталяваў апрацоўшчык, то выконваецца апрацоўшчык па змоўчванню.
Назвы сігналаў «SIG…» з’яўляюцца лікавымі канстантамі (макравызначэнняміСі) са значэннямі, якія вызначаюцца ў загалоўкавым файлеsignal.h
. Лікавыя значэнні сігналаў могуць адрознівацца ў розных сістэмах, хоць асноўная іх частка мае ў розных сістэмах адны і тыя ж значэнні. Утылітаkill
дазваляе задаваць сігнал як лічбай, так і сімвальным пазначэннем.
Сігналы дасылаюцца:
kill()
, у тым ліку:/bin/kill
.Сігналы не могуць быць дасланы працэсу, які завяршыўся і знаходзіцца ў стане«зомбі».
Апрацоўшчык па змоўчванню для большасці сігналаў завяршае выкананне працэсу. Для альтэрнатыўнай апрацоўкі ўсіх сігналаў, за выключэннемSIGKILL іSIGSTOP, працэс можа вызначыць свой апрацоўшчык ці ігнараваць іх узнікненне мадыфікаваннем сваёйсігнальнай маскі.
Працэс (ці карыстальнік з шэла) з эфектыўнымUID, не роўным 0 (UIDсуперкарыстальніка), можа дасылаць сігналы толькі працэсам з тым жа UID.
POSIX вызначае 28 сігналаў, якія можна класіфікаваць наступным чынам:
Назва | Дзеянне па змоўчванню | Апісанне | Тып |
---|---|---|---|
SIGABRT | Завяршэнне з дампам памяці | Сігнал, што дасылаецца функцыяйabort() | Кіраванне |
SIGALRM | Завяршэнне | Сігнал сканчэння часу, зададзенагаalarm() | Паведамленне |
SIGBUS | Завяршэнне з дампам памяці | Няправільны зварот у фізічную памяць | Выключная сітуацыя |
SIGCHLD | Ігнаруецца | Даччыны працэс завершаны ці спынены | Паведамленне |
SIGCONT | Працягнуць выконванне | Працягнуць выконванне раней прыпыненага працэсу | Кіраванне |
SIGFPE | Завяршэнне з дампам памяці | Памылковая арыфметычная аперацыя | Выключэнне |
SIGHUP | Завяршэнне | Закрыццё тэрмінала | Паведамленне |
SIGILL | Завяршэнне з дампам памяці | Недапушчальная інструкцыя працэсара | Выключная сітуацыя |
SIGINT | Завяршэнне | Сігнал спынення (Ctrl-C) з тэрмінала | Кіраванне |
SIGKILL | завяршэнне | Безумоўнае завяршэнне | кіраванне |
SIGPIPE | Завяршэнне | Запіс у разарванае злучэнне (pipe, socket) | Паведамленне |
SIGQUIT | Завяршэнне з дампам памяці | Сігнал «Quit» з тэрмінала (Ctrl-\) | Кіраванне |
SIGSEGV | Завяршэнне з дампам памяці | Парушэнне пры звароце да памяці | Выключная сітуацыя |
SIGSTOP | спыненне працэсу | Спыненне выканання працэсу | кіраванне |
SIGTERM | Завяршэнне | Сігнал завяршэння (сігнал па змоўчванню для ўтыліты kill) | Кіраванне |
SIGTSTP | Прыпыненне працэсу | Сігнал прыпынення выканання з тэрмінала (Ctrl-Z). | Кіраванне |
SIGTTIN | Прыпыненне працэсу | Спроба чытання з тэрмінала фонавым працэсам | Кіраванне |
SIGTTOU | Прыпыненне працэсу | Спроба запісу на тэрмінал фонавым працэсам | Кіраванне |
SIGUSR1 | Завяршэнне | Карыстальніцкі сігнал № 1 | Вызначаецца карыстальнікам |
SIGUSR2 | Завяршэнне | Карыстальніцкі сігнал № 2 | Вызначаецца карыстальнікам |
SIGPOLL | Завяршэнне | Падзея, якая адсочваеццаpoll() | Паведамленне |
SIGPROF | Завяршэнне | Сканчэнне таймерапрафілявання | Адладка |
SIGSYS | Завяршэнне з дампам памяці | Няправільны сістэмны выклік | Выключэнне |
SIGTRAP | Завяршэнне з дампам памяці | Пастка трасіроўкі ці брэйкпойнт | Адладка |
SIGURG | Ігнаруецца | На сокеце атрыманы тэрміновыя даныя | Паведамленне |
SIGVTALRM | Завяршэнне | Сканчэнне «віртуальнага таймера» | Паведамленне |
SIGXCPU | Завяршэнне з дампам памяці | Працэс перавысіў ліміт працэсарнага часу | выключная сітуацыя |
SIGXFSZ | Завяршэнне з дампам памяці | Працэс перавысіў дапушчальны памер файла | выключная сітуацыя |
Пры апрацоўцы выключных сітуацый і адладкавых сігналаў перад завяршэннем працэс можа запісаць у бягучы каталог файл з дампам памяці працэсу (англ.:core image), з дапамогай якога, адладчык можа узнавіць умовы, пры якіх узнікла дадзеная выключная сітуацыя. Часам (напрыклад, для праграм, якія выконваюцца ад імя суперкарысальніка) дамп памяці не ствараецца з меркавання бяспекі.
Звычайна апрацоўшчык сігналу атрымоўвае толькі адзін аргумент — нумар сігналу (гэта дазваляе ужываць адну функцыю-апрацоўшчык для некалькіх сігналаў). Калі пры заданні апрацоўшчыка сігналу (функцыяйsigaction()
) указаць опцыю SA_SIGINFO, то ў апрацоўшчык будуць перададзены яшчэ два аргументы:
siginfo_t
, якая мае ў складзе:kill
), якая даслала сігнал;Большасць дадатковых кодаў спецыфічныя для кожнага сігналу. Коды, агульныя для ўсіх сігналаў:
Код | Апісанне |
---|---|
SI_USER | Сігнал дасланы функцыяйkill() (ці ўтылітайkill ) |
SI_QUEUE | Сігнал дасланы функцыяйsigqueue() |
SI_TIMER | Сігнал дасланы па сканчэнні часу, вызначанага функцыяйtimer_settime() |
SI_ASYNCIO | Сігнал дасланы па сканчэнні запыту на «асінхронны увод-вывад» |
SI_MESGQ | Сігнал дасланы па з’яўленні паведамлення ў пустой «чарзе паведамленняў Unix» |