Ազդանշան - Linux / Unix հրաման

Linux- ը աջակցում է ինչպես POSIX հուսալի ազդանշանների (այսուհետ `ստանդարտ ազդանշաններ), այնպես էլ POSIX- ի իրական ժամանակի ազդանշանների:

Ստանդարտ ազդանշաններ

Linux- ը սատարում է ստորեւ թվարկված ստանդարտ ազդանշաններ: Մի քանի ազդանշանային համարներ ճարտարապետության կախվածությունն են, ինչպես նշված է «արժեքի» սյունակում: (Որտեղ երեք արժեք է տրվում, առաջինը սովորաբար գործում է ալֆա եւ sparc- ի համար, միջինը մեկը, i386, ppc եւ sh, եւ վերջինը, mips- ի համար:

A- նշանակում է, որ համապատասխան ճարտարապետության ազդանշանը բացակայում է:)

Աղյուսակի «Գործողության» սյունակում գրառումները նշում են ազդանշանի լռելյայն ակցիան, ինչպես հետեւյալը.

Ժամկետը

Նախնական գործողությունն այն է, որ գործընթացը դադարեցվի:

Կիրառեք

Default գործողությունը արհամարհել ազդանշանը:

Core

Նախնական գործողությունն այն է, դադարեցնել գործընթացը եւ թափոնները:

Դադարեցրեք

Default գործողությունն այն է, դադարեցնել գործընթացը:

Նախ, բնօրինակը POSIX.1 ստանդարտում նկարագրված ազդանշաններ:

Ազդանշան Արժեքը Գործողություն Մեկնաբանություն
կամ վերահսկման գործընթացի մահը
SIGINT- ը 2 Ժամկետը Անջատել ստեղնաշարի վրա
SIGQUIT- ը 3 Core Անջատեք ստեղնաշարի վրա
ՍԻԳԻԼ 4 Core Անօրինական ուսուցում
ՍԻԳԱԲՐՏ 6 Core Անջատել ազդանշանն անջատվածից (3)
SIGFPE- ը 8 Core Լողացող կետի բացառություն
ՍԻԳԿԻԼ 9 Ժամկետը Սպանեք ազդանշան
ՍԻԳՍԵԳՎ 11 Core Հիշողության հիշողությունը սխալ է
SIGPIPE 13 Ժամկետը Կտրված խողովակ `գրեք խողովակ` առանց ընթերցողների
SIGALRM 14 Ժամկետը Տագնապային ազդանշան ահազանգից (2)
ՍԻԳԵՐՄ 15 Ժամկետը Դադարեցման ազդանշան
SIGUSR1 30,10,16 Ժամկետը Օգտագործողի կողմից սահմանված ազդանշան 1
SIGUSR2 31,12,17 Ժամկետը Օգտագործողի կողմից սահմանված ազդանշան 2
SIGCHLD- ը 20,17,18 Կիրառեք Երեխայի դադարեցումը կամ դադարեցումը
SIGCONT- ը 19,18,25 Շարունակեք, եթե դադարեցվի
SIGSTOP 17,19,23 Դադարեցրեք Stop գործընթացը
SIGTSTP- ը 18,20,24 Դադարեցրեք Դադարեցվել է տտում
SIGTTIN 21,21,26 Դադարեցրեք tty ներդրումը ֆոնային գործընթացի համար
ՍԻԳՏՏՈՒ 22,22,27 Դադարեցրեք ֆոնային գործընթացի համար

SIGKILL- ի եւ SIGSTOP- ի ազդանշանները չեն կարող բռնել, արգելափակել կամ անտեսվել:

Հաջորդը POSIX.1 ստանդարտում չկան, սակայն նկարագրված է SUSv2 եւ SUSv3 / POSIX 1003.1-2001:

Ազդանշան Արժեքը Գործողություն Մեկնաբանություն
ՍԻԳՊՈԼԼ Ժամկետը Pollable event (Sys V): SIGIO- ի հոմանիշը
ՍԻԳՊՈՖ 27,27,29 Ժամկետը Պրոֆիլինգի ժամանակաչափը սպառվեց
SIGSYS- ը 12, -, 12 Core Սխալ փաստարկ ռեժիմին (SVID)
SIGTRAP- ը 5 Core Trace / breakpoint թակարդը
Սիգուրգ 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)

Մինչեւ Linux 2.2, SIGSYS- ի , SIGXCPU- ի , SIGXFSZ- ի եւ SIGBUS- ի ( SPARC- ից եւ MIPS- ից այլ ճարտարապետների վրա) կանխադրված վարքագիծը դադարեցրեց գործընթացը (առանց հիմնական վերգետնյա ): (Որոշ այլ ստորաբաժանումների համար SIGXCPU- ի եւ SIGXFSZ- ի լռելյայն ակցիան է առանց դադարեցնելու գործընթացը: Linux 2.4- ը համապատասխանում է այդ ազդանշանների համար POSIX 1003.1-2001 պահանջներին `դադարեցնելով հիմնական վերգետնյա գործընթացը:

Հաջորդ հաջորդ տարբեր ազդանշաններ:

Ազդանշան Արժեքը Գործողություն Մեկնաբանություն
SIGEMT- ը 7, -, 7 Ժամկետը
SIGSTKFLT -, 16, - Ժամկետը Stack- ի սխալը coprocessor- ում (չօգտագործված)
SIGIO- ն 23,29,22 Ժամկետը I / O հնարավոր է (4.2 BSD)
SIGCLD- ը -, -, 18 Կիրառեք SIGCHLD- ի հոմանիշը
SIGPWR 29,30,19 Ժամկետը Էլեկտրաէներգիայի ձախողում (System V)
Սիգինֆո 29, -, - SIGPWR- ի հոմանիշը
SIGLOST- ը -, -, - Ժամկետը Ֆայլի կողպեք կորցրած
SIGWINCH- ը 28,28,20 Կիրառեք Պատուհանների չափափոխման ազդանշան (4.3 BSD, Sun)
SIGUNUSED- ը -, 31, - Ժամկետը Չօգտագործված ազդանշան (SIGSYS)

(29-ը ազդանշան է SIGINFO / SIGPWR ալֆայի վրա, սակայն SIGLOST- ի վրա sparc- ով ):

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 իրական ժամանակի ազդանշանների, որոնք թվագրված են 32 ( SIGRTMIN ) -ից մինչեւ 63 ( SIGRTMAX ): (Ծրագրերը միշտ պետք է վերաբերվեն իրական ժամանակի ազդանշաններին, օգտագործելով SIGRTMIN + n նշումը, քանի որ իրական ժամանակի ազդանշանի համարների տատանումը տարբերվում է Unices- ի վրա):

Ի տարբերություն ստանդարտ ազդանշանների, իրական ժամանակի ազդանշաններն ունեն ոչ մի նախադեպային նշանակություն `իրական ժամանակի ազդանշանների ողջ փաթեթը կարող է օգտագործվել կիրառելի նպատակների համար: (Նշենք, սակայն, որ LinuxThreads- ի իրականացումն օգտագործում է առաջին երեք իրական ժամանակի ազդանշանները:)

Չկատարված իրական ժամանակի ազդանշանի կանխադրված գործողությունը դադարեցնելու ընդունման գործընթացը:

Իրական ժամանակի ազդանշաններն առանձնանում են հետեւյալով.

  1. Իրական ժամանակի ազդանշանների բազմակի դեպքերը կարող են հերթին լինել: Ընդհակառակը, եթե ստանդարտ ազդանշանի մի քանի դեպք է ներկայացվում, մինչդեռ այդ ազդանշանը ներկայումս արգելափակված է, ապա միայն մեկ դեպք է հերթագրվում:
  2. Եթե ​​ազդանշանը ուղարկվում է օգտագործելով sigqueue (2), ուղեկցող արժեքը (կամ integer կամ ցուցիչ) կարող է ուղարկվել ազդանշանի հետ: Եթե ​​ընդունման գործընթացը սահմանում է ազդանշան այս ազդանշանի համար, օգտագործելով SA_SIGACTION դրոշը sigaction- ին (2), ապա այն կարող է ձեռք բերել այս տվյալները, siginfo_t- ի si_value դաշտի միջոցով, որը փոխանցողին տրված երկրորդ փաստարկն է: Բացի այդ, այս կառուցվածքի si_pid եւ si_uid դաշտերը կարող են օգտագործվել PID- ը եւ ազդանշանի ուղարկող գործընթացի իրական օգտագործողի ID:
  3. Իրական ժամանակի ազդանշանները մատուցվում են երաշխավորված կարգով: Միեւնույն տիպի բազմակի իրական ժամանակի ազդանշաններն ուղարկվում են իրենց ուղարկված կարգում: Եթե ​​գործընթացին ուղարկվում են տարբեր ժամանակային ազդանշաններ, դրանք առաքվում են սկսած ամենացածր թվանշանով: (Այսինքն, ցածր համարակալված ազդանշաններն ունեն առավելագույն առաջնահերթություն):

Եթե ​​երկուսն էլ ստանդարտ եւ իրական ժամանակի ազդանշանները սպասում են գործընթացին, POSIX- ը թողնում է այն, թե ինչն է նախանշված: Linux- ը, ինչպես շատ այլ ներդրումներ, այս դեպքում գերադասում է ստանդարտ ազդանշաններ:

POSIX- ի համաձայն, կատարումը պետք է թույլ տա առնվազն _POSIX_SIGQUEUE_MAX (32) իրական ժամանակի ազդանշաններ, որոնք պետք է հերթագրվեն գործընթացին: Այնուամենայնիվ, ոչ թե մեկ պրոցեսինգային սահմանը տեղադրելու փոխարեն, Linux- ը բոլոր գործընթացների համար սահմանում է հերթական իրական ազդանշանների քանակի վրա համակարգային լայն սահման:

Այս սահմանը կարելի է դիտարկել (եւ արտոնությամբ) փոխվել / proc / sys / kernel / rtsig-max ֆայլով: Առնչվող ֆայլ, / proc / sys / kernel / rtsig-max , կարող են օգտագործվել, թե արդյոք իրական ժամանակի ազդանշանները ներկայումս պահվում են:

ՊԱՏԱՍԽԱՆ

POSIX.1

Կարեւոր է. Օգտագործեք հրամանատարությունը ( % մարդ ), որպեսզի տեսնեք, թե ինչպես է օգտագործվում հրամանը ձեր որոշակի համակարգչում: