Signāls - Linux / Unix komandu

Linux atbalsta gan POSIX uzticamus signālus (turpmāk tekstā "standarta signālus"), gan POSIX reāllaika signālus.

Standarta signāli

Linux atbalsta tālāk minētos standarta signālus. Vairāki signālu numuri ir atkarīgi no arhitektūras, kā norādīts slejā "Vērtība". (Ja ir norādītas trīs vērtības, pirmā parasti ir derīga alfa un sparc, vidējā i386, ppc un sh, un pēdējā - mips.

A - apzīmē, ka attiecīgajā arhitektūrā nav signāla.)

Tabulas slejas "Darbība" ieraksti norāda noklusējuma darbību signālam šādi:

Termiņš

Noklusējuma darbība ir pārtraukt procesu.

Ign

Noklusējuma darbība ir ignorēt signālu.

Core

Noklusējuma darbība ir pārtraukt procesu un dump core.

Apstāties

Noklusējuma darbība ir pārtraukt procesu.

Vispirms signāli, kas aprakstīti sākotnējā POSIX.1 standartā.

Signāls Vērtība Darbība Komentārs
vai kontroles procesa nāve
SIGINT 2 Termiņš Pārtraukt no tastatūras
SIGQUIT 3 Core Iziet no tastatūras
SIGILL 4 Core Nelikumīga instrukcija
SIGABRT 6 Core Pārtraukt signāla pārtraukšanu (3)
SIGFPE 8 Core Peldošā komata izņēmums
SIGKILL 9 Termiņš Nogalināt signālu
SIGSEGV 11 Core Nederīga atmiņas norāde
SIGPIPE 13 Termiņš Broken pipe: rakstīt caurulē bez lasītāju
SIGALRM 14 Termiņš Taimera signāls no trauksmes (2)
SIGTERM 15 Termiņš Izbeigšanas signāls
SIGUSR1 30,10,16 Termiņš Lietotāja definēts signāls 1
SIGUSR2 31,12,17 Termiņš Lietotāja definēts signāls 2
SIGCHLD 20,17,18 Ign Bērns apstājies vai izbeidzas
SIGCONT 19,18,25 Turpināt, ja tiek apturēta
SIGSTOP 17,19,23 Apstāties Apstāšanās process
SIGTSTP 18,20,24 Apstāties Pārtraukt drukāt tty
SIGTTIN 21,21,26 Apstāties tty ievadi fona procesam
SIGTTOU 22,22,27 Apstāties tty izeja fona procesam

Signālus SIGKILL un SIGSTOP nevar noķert, bloķēt vai ignorēt.

Nākošais signāls nav POSIX.1 standarta versijā, bet aprakstīts SUSv2 un SUSv3 / POSIX 1003.1-2001.

Signāls Vērtība Darbība Komentārs
SIGPOLL Termiņš Piesārņojošs notikums (Sys V). SIGIO sinonīms
SIGPROF 27,27,29 Termiņš Profilēšanas taimeris ir beidzies
SIGSYS 12, -, 12 Core Nepareizs rutīnas arguments (SVID)
SIGTRAP 5 Core Trace / pārtraukuma punkta slazds
SIGURG 16,23,21 Ign Steidzams stāvoklis ligzdā (4.2 BSD)
SIGVTALRM 26,26,28 Termiņš Virtuālais modinātājs (4.2 BSD)
SIGXCPU 24,24,30 Core CPU laika limits ir pārsniegts (4.2 BSD)
SIGXFSZ 25,25,31 Core Faila lieluma limits ir pārsniegts (4.2 BSD)

Līdz pat Linux 2.2 iekļaušanai , SIGSYS , SIGXCPU , SIGXFSZ un (citu arhitektūru, kas nav SPARC un MIPS) noklusējuma darbība SIGBUS bija pārtraukt procesu (bez kodola izgāšanas). (Dažās citās Vienībās noklusējuma darbība SIGXCPU un SIGXFSZ ir procesa pārtraukšana bez kodola izgāšanas.) Linux 2.4 atbilst šiem POS signāliem, kas paredz POSIX 1003.1-2001 prasības, pārtraucot procesu ar galveno dump.

Tālāk dažādi citi signāli.

Signāls Vērtība Darbība Komentārs
SIGEMT 7, -, 7 Termiņš
SIGSTKFLT -, 16, - Termiņš Kopprocesora bojājums (neizmantots)
SIGIO 23,29,22 Termiņš I / O tagad ir iespējams (4.2 BSD)
SIGCLD -, -, 18 Ign SIGCHLD sinonīms
SIGPWR 29,30,19 Termiņš Strāvas zudums (sistēma V)
SIGINFO 29, -, - SIGPWR sinonīms
SIGLOST -, -, - Termiņš Failu bloķēšana zaudēta
SIGWINCH 28,28,20 Ign Loga izmēra maiņas signāls (4.3 BSD, Sun)
SIGUNUSED -, 31, - Termiņš Neizmantots signāls (būs SIGSYS)

(Signāls 29 ir SIGINFO / SIGPWR alfa versijā, bet SIGLOST - par sparc .)

SIGEMT nav norādīts POSIX 1003.1-2001 versijā, bet nekad neatrodas lielākajā daļā citu Unices, kur tā noklusējuma darbība parasti ir pabeigta procesā ar galveno dump.

SIGPWR (kas nav norādīts POSIX 1003.1-2001) parasti tiek ignorēts tiem citiem Unices, kur tas parādās.

SIGIO (kas nav norādīts POSIX 1003.1-2001) tiek ignorēts pēc noklusējuma vairākām citām Unices.

Reāllaika signāli

Linux atbalsta reāllaika signālus, kā sākotnēji definēts POSIX.4 reāllaika paplašinājumos (un tagad iekļauts POSIX 1003.1-2001). Linux atbalsta 32 reāllaika signālus, skaitot no 32 ( SIGRTMIN ) līdz 63 ( SIGRTMAX ). (Programmām vienmēr būtu jāatsaucas uz reāllaika signāliem, izmantojot apzīmējumu SIGRTMIN + n, jo reāllaika signālu skaits dažādās vienībās ir atšķirīgs.)

Atšķirībā no standarta signāliem reāllaika signāliem nav iepriekš definētas nozīmes: visu reālā laika signālu komplektu var izmantot noteiktiem mērķiem. (Tomēr ņemiet vērā, ka LinuxThreads ieviešana izmanto pirmos trīs reāllaika signālus.)

Noklusētā reāllaika signāla noklusējuma darbība ir pārtraukt saņemšanas procesu.

Reāllaika signāli atšķiras ar sekojošo:

  1. Vairākus reāllaika signālu gadījumus var ievietot rindā. Turpretim, ja tiek piegādāti vairāki standarta signāla gadījumi, kamēr šis signāls pašlaik ir bloķēts, tad tikai viens eksemplārs ir rindā.
  2. Ja signāls tiek nosūtīts, izmantojot signālu (2), ar signālu var nosūtīt pievienoto vērtību (vai nu veseli skaitļi vai rādītājs). Ja saņemšanas process izveido šī signāla apstrādātāju, izmantojot SA_SIGACTION karodziņu, lai izveidotu sigāciju (2), tas var iegūt šos datus, izmantojot siginfo_t struktūras si_value lauku, kas nodots kā otrais apstrādātāja arguments. Turklāt šīs struktūras si_pid un si_uid laukus var izmantot, lai iegūtu signāla nosūtīšanas procesa PID un reālo lietotāja ID.
  3. Reāllaika signāli tiek piegādāti garantētā pasūtījumā. Vairāki vienāda tipa reāllaika signāli tiek piegādāti tādā secībā, kādā tie tika nosūtīti. Ja procesam tiek nosūtīti dažādi reāllaika signāli, tie tiek piegādāti, sākot ar zemāko skaitļu signālu. (Ti, ar zemu skaitļu signāliem ir visaugstākā prioritāte.)

Ja procesu gaida gan standarta, gan reāllaika signāli, POSIX atstāj to nenoteiktu, kas tiek piegādāts vispirms. Linux, tāpat kā daudzi citi ieviešanas gadījumi, šajā gadījumā prioritāti piešķir standarta signāliem.

Saskaņā ar POSIX, īstenojumam jāļauj vismaz vismaz _POSIX_SIGQUEUE_MAX (32) reāllaika signālus uz rindu uz procesu. Tomēr, nevis lai novietotu katra procesa ierobežojumu, Linux visām sistēmām uzliek sistēmas rādītāja reāllaika signālu skaitu visiem procesiem.

Šo ierobežojumu var apskatīt (un ar privilēģiju) mainīt, izmantojot failu / proc / sys / kernel / rtsig-max . Saistīto failu, / proc / sys / kernel / rtsig-max , var izmantot, lai noskaidrotu, cik reāllaika signālu pašlaik ir rindā.

Kas atbilst

POSIX.1

Svarīgi: izmantojiet vīriešu komandu ( % man ), lai redzētu, kā komanda tiek izmantota jūsu konkrētajā datorā.