Сігнал - Linux / Unix каманднага

Linux падтрымлівае як POSIX надзейныя сігналы (у далейшым «стандартныя сігналы») і POSIX ў рэальным маштабе часу сігналы.

стандартныя сігналы

Linux падтрымлівае стандартныя сігналы , пералічаныя ніжэй. Некалькі нумары сігналаў залежаць архітэктура, як паказана ў калонцы «Value». (Там, дзе тры значэнні, то першае, як правіла, дзейнічае на альфа і СПАРК, сярэдні для i386, кантэкстная і ш, а апошні для працаёмкасці.

А - азначае, што сігнал адсутнічае на адпаведнай архітэктуры).

Запісы ў слупку «Дзеянне» табліцы ўказаць дзеянне па змаўчанні для сігналу, наступным чынам:

тэрмін

Дзеянне па змаўчанні для завяршэння працэсу.

Ign

Дзеянне па змаўчанні ігнараваць сігнал.

ядро

Дзеянне па змаўчанні для завяршэння працэсу і дампа ядра.

спыніць

Дзеянне па змаўчанні, каб спыніць працэс.

Па-першае сігналаў апісаны ў першапачатковым стандарце POSIX.1.

сігнал значэнне дзеянне каментар
або смерць кантролю працэсу
SIGINT 2 тэрмін Перапыненне з клавіятуры
SIGQUIT 3 ядро Выхад з клавіятуры
SIGILL 4 ядро забароненая каманда
SIGABRT 6 ядро Перапыніць сігнал перапынення (3)
SIGFPE 8 ядро выключэнне з якая плавае кропкай
SIGKILL 9 тэрмін забі сігнал
SIGSEGV 11 ядро Недапушчальнае зварот да памяці
SIGPIPE 13 тэрмін Зламаная труба: напісаць трубы, без чытачоў
SIGALRM 14 тэрмін Таймер сігнал трывогі (2)
SIGTERM 15 тэрмін сігнал Скасаванне
SIGUSR1 30,10,16 тэрмін Вызначаны карыстальнікам сігнал 1
SIGUSR2 31,12,17 тэрмін Вызначаны карыстальнікам сігнал 2
SIGCHLD 20,17,18 Ign Дзіця спынены або спынены
SIGCONT 19,18,25 Працягнуць, калі спыненая
SIGSTOP 17,19,23 спыніць спыніць працэс
SIGTSTP 18,20,24 спыніць Стоп набраныя на тэлетайп
SIGTTIN 21,21,26 спыніць тэрмінал ўводу для фонавага працэсу
SIGTTOU 22,22,27 спыніць Выхадны тэрмінал для фонавага працэсу

Сігналы SIGKILL і SIGSTOP не могуць быць перахопленыя, заблякаваны або ігнаруецца.

Далей сігналы не ў стандарце POSIX.1, але апісаныя ў SUSv2 і SUSv3 / POSIX 1003.1-2001.

сігнал значэнне дзеянне каментар
SIGPOLL тэрмін Pollable падзея (Sys V). сінонім SIGIO
SIGPROF 27,27,29 тэрмін Прафіляванне таймера скончыўся
SIGSYS 12, -, 12 ядро Дрэнны аргумент руціна (SVID)
SIGTRAP 5 ядро Трасіроўка / пастка пункту перапынення
SIGURG 16,23,21 Ign Тэрміновае ўмова на гняздо (4.2 BSD)
SIGVTALRM 26,26,28 тэрмін Віртуальны будзільнік (4,2 BSD)
SIGXCPU 24,24,30 ядро Абмежаванне працэсарнага часу перавышаны (4.2 BSD)
SIGXFSZ 25,25,31 ядро Гранічны памер файла перавышана (4,2 BSD)

Да і уключаючы Linux 2.2, паводзіны па змаўчанні для SIGSYS, SIGXCPU, SIGXFSZ, і (на іншых архітэктурах , чым SPARC і MIPS) SIGBUS быў завяршыць працэс (без дампа ядра). (На некаторых іншых UNIX'ах дзеянне па змаўчанні для SIGXCPU і SIGXFSZ з'яўляецца завяршэнне працэсу без дампа ядра.) Linux 2.4 адпавядае патрабаванням POSIX 1003.1-2001 для гэтых сігналаў, спыненне працэсу з дамп памяці.

Наступныя розныя іншыя сігналы.

сігнал значэнне дзеянне каментар
SIGEMT 7, -, 7 тэрмін
SIGSTKFLT - 16, - тэрмін памылка Stack на супрацэсара (не выкарыстоўваецца)
SIGIO 23,29,22 тэрмін I / O зараз магчыма (4.2 BSD)
SIGCLD -, -, 18 Ign Сінонім для SIGCHLD
SIGPWR 29,30,19 тэрмін Збой харчавання (System V)
SIGINFO 29, -, - сінонім SIGPWR
SIGLOST -, -, - тэрмін Блакаванне файла страцілі
SIGWINCH 28,28,20 Ign Акно змены памеру сігналу (4,3 BSD, Sun)
SIGUNUSED - 31, - тэрмін Нявыкарыстаны сігнал (будзе SIGSYS)

(Сігнал 29 SIGINFO / SIGPWR на альфа , але SIGLOST на SPARC.)

SIGEMT не паказаная ў POSIX 1003.1-2001, але ў большасці іншых UNIX'ах, дзе яго дзеянне па змаўчанні з'яўляецца , як правіла , каб завяршыць працэс з дамп памяці з'яўляецца Neverthless.

SIGPWR (які не пазначаны ў POSIX 1003.1-2001) , як правіла , ігнаруецца па змаўчанні на тых іншых UNIX'ах , дзе ён з'яўляецца.

SIGIO (які не пазначаны ў POSIX 1003.1-2001) ігнаруецца па змаўчанні на некалькіх іншых UNIX'ах.

Сігналы рэальнага часу

Linux падтрымлівае сігналы ў рэальным маштабе часу , як гэта першапачаткова вызначаны ў пашырэннях рэальнага часу POSIX.4 (і цяпер уключаны ў POSIX 1003.1-2001). Linux , падтрымлівае 32 у рэальным маштабе часу сігналы, пронумерованные ад 32 (SIGRTMIN) да 63 (SIGRTMAX). (Праграмы заўсёды ідуць у рэжыме рэальнага часу з выкарыстаннем сігналамі абазначэння SIGRTMIN + п, бо дыяпазон лікаў сігналу ў рэжыме рэальнага часу змяняецца па юнікс.)

У адрозненне ад стандартных сігналаў, у рэальным маштабе часу сігналы не маюць загадзя вызначаныя значэнні: увесь набор сігналаў рэальнага часу могуць быць выкарыстаны для прымянення пэўных мэтаў. (Аднак варта адзначыць, што рэалізацыя LinuxThreads выкарыстоўвае першыя тры ў рэальным маштабе часу сігналы.)

Дзеянне па змаўчанні для неапрацаванага сігналу ў рэальным часе, каб завяршыць працэс прыёму.

Сігналы рэальнага часу адрозніваюцца ў наступным:

  1. Некалькі асобнікаў сігналаў рэальнага часу могуць быць пастаўлены ў чаргу. У супрацьлегласць гэтаму, калі некалькі асобнікаў стандартнага сігналу паступаюць у той час як гэты сігнал у дадзены момант заблякаваны, то толькі адзін асобнік знаходзіцца ў чарзе.
  2. Калі сігнал перадаецца з выкарыстаннем sigqueue (2), спадарожнае значэнне (цэлы лік або паказальнік) можа быць пасланы з сігналам. Калі які прымае працэс ўсталёўвае апрацоўшчык для гэтага сігналу , выкарыстоўваючы сцяг sa_sigaction да sigaction (2) , то ён можа атрымаць гэтыя дадзеныя праз si_value поля структуры siginfo_t , перададзеную ў якасці другога аргументу апрацоўшчыка. Акрамя таго, si_pid і si_uid поля гэтай структуры могуць быць выкарыстаны для атрымання PID і рэальны ідэнтыфікатар карыстальніка працэсу , які пасылае сігнал.
  3. сігналы ў рэжыме рэальнага часу паступае ў гарантаванай парадку. Некалькі рэальнага часу сігналы аднаго і таго ж тыпу пастаўляюцца ў парадку, яны былі адпраўленыя. Калі розныя сігналы ў рэальным маштабе часу пасылаюцца да працэсу, яны будуць дастаўлены пачынаючы з найменшай нумарам сігналу. (То бок, нізкія пранумараваных сігналы маюць найвышэйшы прыярытэт.)

Калі абодва стандартных і ў рэальны маштабе час сігналаў у чаканні на працягу працэсу, POSIX пакідае нявызначаным, які дастаўляецца ў першую чаргу. Linux, як і многія іншыя рэалізацыі, аддае прыярытэт стандартных сігналаў у гэтым выпадку.

У адпаведнасці з POSIX, рэалізацыя павінна дазволіць, па меншай меры _POSIX_SIGQUEUE_MAX (32) у рэжыме рэальнага часу сігналы, якія будуць пастаўлены ў чаргу да працэсу. Аднак замест таго, каб змясціць абмежаванне на працэс, Linux, накладвае сістэмны ліміт на колькасць пастаўленых у чаргу сігналаў рэальнага часу для ўсіх працэсаў.

Гэты мяжа можна разглядаць (і прывілей) зменена праз / Proc / сістэмы / ядро / rtsig-макс файл. Звязаны файл, / Proc / SYS / ядро / rtsig-макс, можна выкарыстоўваць , каб даведацца, колькі сігналаў у рэальным маштабе часу ў цяперашні час у чарзе.

Адпаведнасць

POSIX.1

Важна: Выкарыстоўвайце каманду чалавека (%) чалавек , каб паглядзець , як каманда выкарыстоўваецца на вашым канкрэтным кампутары.