Movatterモバイル変換


[0]ホーム

URL:


Перайсці да зместу
Вікіпедыя
Пошук

Сігналы (UNIX)

Неправераная
З Вікіпедыі, свабоднай энцыклапедыі

Статус версіі старонкі

The page has not been checked

У гэтай старонкі нямаправераных версій, хутчэй за ўсё, яе якасцьне ацэньвалася на адпаведнасць стандартам.

Сігналы ўUNIX,Unix-падобных і іншыхPOSIX-сумяшчальныхаперацыйных сістэмах з’яўляюцца адным з сродкаўузаемадзеяння паміж працэсамі (англ.:IPC, inter-process communication). Фактычна, сігнал — гэта асінхроннае паведамленне працэсу аб якой-небудзь падзеі. Калі сігнал дасланы працэсу, аперацыйная сістэма прыпыняе выконванне працэсу. Калі працэс усталяваў уласныапрацоўшчык сігналу, аперацыйная сістэма запускае гэты апрацоўшчык, перадаўшы яму інфармацыю аб сігнале. Калі працэс не ўсталяваў апрацоўшчык, то выконваецца апрацоўшчык па змоўчванню.

Назвы сігналаў «SIG…» з’яўляюцца лікавымі канстантамі (макравызначэнняміСі) са значэннямі, якія вызначаюцца ў загалоўкавым файлеsignal.h. Лікавыя значэнні сігналаў могуць адрознівацца ў розных сістэмах, хоць асноўная іх частка мае ў розных сістэмах адны і тыя ж значэнні. Утылітаkill дазваляе задаваць сігнал як лічбай, так і сімвальным пазначэннем.

Пасылка сігналаў

[правіць |правіць зыходнік]

Сігналы дасылаюцца:

  • з тэрмінала, націсканнем спецыяльных клавіш ці іх камбінацый (напрыклад, націсканне Ctrl-C генеруеSIGINT, а Ctrl-ZSIGTSTP);
  • ядром сістэмы:
    • пры ўзнікненні апаратных выключэнняў (недапушчальных інструкцый, парушэннях пры звяртанні ў памяць, сістэмных збоях і г. д.);
    • пры памылковых сістэмных выкліках;
    • для інфармавання аб падзеях увода-вывада;
  • адным працэсам другому (ці самому сабе), з дапамогай сістэмнага выкліку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), з дапамогай якога, адладчык можа узнавіць умовы, пры якіх узнікла дадзеная выключная сітуацыя. Часам (напрыклад, для праграм, якія выконваюцца ад імя суперкарысальніка) дамп памяці не ствараецца з меркавання бяспекі.

SA_SIGINFO

[правіць |правіць зыходнік]

Звычайна апрацоўшчык сігналу атрымоўвае толькі адзін аргумент — нумар сігналу (гэта дазваляе ужываць адну функцыю-апрацоўшчык для некалькіх сігналаў). Калі пры заданні апрацоўшчыка сігналу (функцыяйsigaction()) указаць опцыю SA_SIGINFO, то ў апрацоўшчык будуць перададзены яшчэ два аргументы:

  1. указальнік на структуруsiginfo_t, якая мае ў складзе:
    • бітавая маска дадатковых «кодаў сігналу», што вызначае прычыну яго ўзнікнення;
    • ідэнтыфікатар працэсу (PID), які даслаў сігнал;
    • эфектыўны ідэнтыфікатар карыстальніка (UID), ад імя якога выконваецца працэс (напрыклад, утылітаkill), якая даслала сігнал;
    • адрас інструкцыі, у якой узнікла выключэнне;
    • і г. д.
  2. указальнік на «машынны кантэкст» на момант узнікнення сігналу (са «стэкам сігналу» — дадатковымі данымі, якія змяшчаюцца ў стэк пры выкліку некаторых сігналаў-выключэнняў).

Большасць дадатковых кодаў спецыфічныя для кожнага сігналу. Коды, агульныя для ўсіх сігналаў:

КодАпісанне
SI_USERСігнал дасланы функцыяйkill() (ці ўтылітайkill)
SI_QUEUEСігнал дасланы функцыяйsigqueue()
SI_TIMERСігнал дасланы па сканчэнні часу, вызначанага функцыяйtimer_settime()
SI_ASYNCIOСігнал дасланы па сканчэнні запыту на «асінхронны увод-вывад»
SI_MESGQСігнал дасланы па з’яўленні паведамлення ў пустой «чарзе паведамленняў Unix»

Гл. таксама

[правіць |правіць зыходнік]

Спасылкі

[правіць |правіць зыходнік]
Узята з "https://be.wikipedia.org/w/index.php?title=Сігналы_(UNIX)&oldid=4460128"
Катэгорыі:

[8]ページ先頭

©2009-2025 Movatter.jp