Сигнал - Linux / Unix команадсы

Linux POSIX сенімді сигналдарын (бұдан әрі «стандартты сигналдар») және POSIX нақты уақыт сигналдарын қолдайды.

Стандартты сигналдар

Linux төменде көрсетілген стандартты сигналдарды қолдайды. Бірнеше сигнал сандары «Мән» бағанында көрсетілгендей архитектураға тәуелді болады. (Үш мән берілсе, біріншісі әдетте альфа және спарц үшін, ал екіншісі i386, ppc және sh үшін, ал соңғы біреуі үшін жарамды.

A - тиісті архитектурадағы сигнал жоқ екендігін білдіреді.)

Кестенің «Әрекет» бағанындағы жазбалар сигналдың әдепкі әрекетін келесідей көрсетеді:

Мерзімі

Әдепкі әрекет - бұл процесті тоқтату.

Енгізіңіз

Әдепкі әрекет - сигналды елемеу.

Core

Әдепкі әрекет - процесті және қоқысты өзегін тоқтату.

Тоқта

Әдепкі әрекет - процесті тоқтату.

Алдымен бастапқы POSIX.1 стандартында сипатталған сигналдар.

Сигнал Мәні Әрекет Түсініктеме
немесе бақылау процесінің қайтыс болуы
SIGINT 2 Мерзімі Пернетақтадан үзу
SIGQUIT 3 Core Пернетақтадан шығыңыз
SIGILL 4 Core Заңсыз нұсқаулық
SIGABRT 6 Core Қабылдамаудан бас тарту сигналы (3)
SIGFPE 8 Core Шегіну нүктесінің ерекшелігі
SIGKILL 9 Мерзімі Соққы жасаңыз
SIGSEGV 11 Core Жадтың анықтамасы жарамсыз
SIGPIPE 13 Мерзімі Брондалған құбыр: оқырмандармен құбырға жазыңыз
SIGALRM 14 Мерзімі Ескерту сигналының таймерінің сигналы (2)
SIGTERM 15 Мерзімі Тоқтату сигналы
SIGUSR1 30,10,16 Мерзімі Пайдаланушы анықтаған сигнал 1
SIGUSR2 31,12,17 Мерзімі Пайдаланушы анықтаған сигнал 2
SIGCHLD 20,17,18 Енгізіңіз Бала тоқтап немесе тоқтатылды
SIGCONT 19,18,25 Егер тоқтатылса, жалғастырыңыз
SIGSTOP 17,19,23 Тоқта Тоқтату процесі
SIGTSTP 18,20,24 Тоқта Tty ішінде теру тоқтатылады
SIGTTIN 21,21,26 Тоқта фондық процесті енгізу үшін
SIGTTOU 22,22,27 Тоқта өңдік процесс үшін tty шығу

SIGKILL және SIGSTOP сигналдары ұсталмайды, бұғатталмайды немесе елемейді.

Бұдан әрі POSIX.1 стандартында емес, бірақ SUSv2 және SUSv3 / POSIX 1003.1-2001 сипатталған сигналдар.

Сигнал Мәні Әрекет Түсініктеме
SIGPOLL Мерзімі Дауыс беретін оқиға (Sys V). SIGIO синонимі
SIGPROF 27,27,29 Мерзімі Таймерді профильдеу мерзімі аяқталды
SIGSYS 12, -, 12 Core Күнделікті (SVID) дұрыс емес дәлел
SIGTRAP 5 Core Бақылау нүктесінің тұзағы
SIGURG 16,23,21 Енгізіңіз Розеткадағы жедел жағдай (4.2 BSD)
SIGVTALRM 26,26,28 Мерзімі Виртуалды оятқыш (4.2 BSD)
SIGXCPU 24,24,30 Core CPU уақыт шегі асып (4.2 BSD)
SIGXFSZ 25,25,31 Core Файл өлшемінің шегі асып кетті (4.2 BSD)

SIGSYS , SIGXCPU , SIGXFSZ және SIGBUS (SPARC және MIPS қоспағанда сәулет) бойынша әдепкі мінез-құлық Linux 2.2-ке дейін және қоса алғанда, процесті тоқтатады (негізгі қоқыссыз ). (Кейбір басқа бөлімшелерде SIGXCPU және SIGXFSZ үшін әдепкі әрекет ядро тастауынсыз процесті аяқтау болып табылады.) 2.4 Linux осы сигналдарға арналған POSIX 1003.1-2001 талаптарына сәйкес келеді, бұл ядро ​​төсенішімен процесті тоқтатады.

Әр түрлі келесі сигналдар.

Сигнал Мәні Әрекет Түсініктеме
SIGEMT 7, -, 7 Мерзімі
SIGSTKFLT -, 16, - Мерзімі Сцепроцессорға стек ақаулары (пайдаланылмаған)
SIGIO 23,29,22 Мерзімі I / O қазір мүмкін (4.2 BSD)
SIGCLD -, -, 18 Енгізіңіз SIGCHLD синонимі
SIGPWR 29,30,19 Мерзімі Электр қуаты өшіп қалса (V жүйесі)
SIGINFO 29, -, - SIGPWR синонимі
SIGLOST -, -, - Мерзімі Файл құлпы жоғалды
SIGWINCH 28,28,20 Енгізіңіз Терезенің өлшемін өзгерту сигналы (4.3 BSD, Күн)
SIGUNUSED -, 31, - Мерзімі Пайдаланылмаған сигнал (SIGSYS болады)

(29-сигнал альфадағы SIGINFO / SIGPWR , бірақ SIGLOST-да спаркада .)

SIGEMT POSIX 1003.1-2001 жүйесінде көрсетілмеген, бірақ ол көптеген басқа Unices-да пайда болады, онда әдепкі әрекеті, әдетте, ядро ​​тастайтын процесті тоқтату болып табылады.

SIGPWR (ол POSIX 1003.1-2001 ішінде көрсетілмеген), әдетте, ол пайда болған басқа бірліктерде әдепкі бойынша еленбейді.

SIGIO (POSIX 1003.1-2001-де көрсетілмеген) бірнеше басқа Unices-да әдепкі бойынша еленбейді.

Нақты уақыттағы сигналдар

Linux нақты уақытта POSIX.4 нақты уақыт кеңейтілімінде анықталғандай нақты уақыт сигналдарын қолдайды (және қазір POSIX 1003.1-2001 нұсқасына кіреді). Linux 32 ( SIGRTMIN ) -дан 63 ( SIGRTMAX ) -ке дейінгі 32 нақты уақыт сигналдарын қолдайды. (Бағдарламалар әрқашан SIGRTMIN + n белгілерін пайдаланып, нақты уақыт сигналдарына сілтеме жасау керек, себебі нақты уақыт сигнал нөмірлерінің саны Unices ішінде өзгереді.)

Стандартты сигналдардан айырмашылығы, нақты уақыт сигналдарында алдын ала анықталған мәндер жоқ: нақты уақыт сигналдарының бүкіл жиынтығы қолданылатын мақсаттар үшін пайдаланылуы мүмкін. (LinuxThreads іске асыру алғашқы үш нақты уақыт сигналдарын қолданатынын ескеріңіз.)

Өңделмеген нақты уақыт сигналына арналған әдепкі әрекет қабылдау процесін тоқтатады.

Нақты уақыттағы сигналдар төмендегілермен ерекшеленеді:

  1. Нақты уақыттағы сигналдардың бірнеше даналарын кезекке қоюға болады. Керісінше, егер сигнал қазір бұғатталған кезде стандартты сигналдың бірнеше данасы жеткізілсе, онда тек бір данасы кезекке қойылады.
  2. Егер сигнал sigqueue (2) арқылы жіберілсе , сигналмен бірге ілесетін мән (бүтін сан немесе көрсеткіш) жіберілуі мүмкін. Егер қабылдау үрдісі SA_SIGACTION жалаушасын (2) sigaction (2) арқылы осы сигнал үшін өңдегішті орнатса , ол осы деректерді өңдегішінің екінші дәлелі ретінде алынған siginfo_t құрылымының si_value өрісі арқылы ала алады. Сонымен қатар, осы құрылымның si_pid және si_uid өрістерін PID және сигнал жіберетін процестің шынайы пайдаланушы идентификаторын алу үшін пайдалануға болады.
  3. Нақты уақыттағы сигналдар кепілдік берілген тәртіппен жеткізіледі. Бір типтегі бірнеше нақты уақыт сигналдары жіберілген тәртіпте жеткізіледі. Процесті әр түрлі нақты уақыт сигналдары жібергенде, олар төменгі нөмірлі сигналдан бастап жеткізіледі. (Яғни, төменгі сандық сигналдар жоғары басымдыққа ие.)

Егер стандартты және нақты уақыт сигналдары процесте күтілсе, POSIX оны алдымен жеткізілетін анықталмаған қалдырады. Көптеген басқа бағдарламалар сияқты Linux бұл жағдайда стандартты сигналдарға басымдық береді.

POSIX-ке сәйкес, іске асыру процесте кезекке қоюға арналған _POSIX_SIGQUEUE_MAX (32) нақты уақыт сигналдарына рұқсат беруі керек. Дегенмен, процестік процесті шектеуді емес, Linux барлық процестер үшін кез-келген нақты уақыт сигналдарының санына жүйелік шегі белгілейді.

Бұл шектеуді / proc / sys / kernel / rtsig-max файлымен өзгертілген (және артықшылықпен) қарауға болады. Қазіргі уақытта қандай нақты уақыт сигналдарының кезекке қойылғанын білу үшін, / proc / sys / kernel / rtsig-max файлын пайдалануға болады.

КЕЛІСІЛГЕН

POSIX.1

Маңызды: Жеке компьютерде пәрменді қалай пайдалану керектігін көру үшін man ( % man ) пәрменін пайдаланыңыз.