Signaali - Linux / Unix-komento

Linux tukee sekä POSIX-luotettavia signaaleja (jäljempänä "standardisignaaleja") että POSIX-reaaliaikaisia ​​signaaleja.

Vakiosignaalit

Linux tukee alla lueteltuja vakiosignaaleja. Useat signaalinumerot ovat arkkitehtuuria riippuvaisia, kuten "Arvo" -sarakkeessa on osoitettu. (Jos kolme arvoa annetaan, ensimmäinen on yleensä voimassa alfa ja sparc, keskimmäinen i386, ppc ja sh, ja viimeinen mipsille.

A - tarkoittaa, että vastaava arkkitehtuuri puuttuu signaalista.)

Taulukon Toiminto-sarakkeessa olevat merkinnät määrittävät signaalin oletustoiminnon seuraavasti:

Termi

Oletuksena on lopettaa prosessi.

Ign

Oletuksena on ohittaa signaali.

Ydin

Oletusasetus on lopettaa prosessin ja salauksen ydin.

Stop

Oletuksena on lopettaa prosessi.

Ensin signaalit, jotka on kuvattu alkuperäisessä POSIX.1-standardissa.

signaali Arvo Toiminta Kommentti
tai kontrollointiprosessin kuolemaa
SIGINT 2 Termi Keskeytys näppäimistöstä
SIGQUIT 3 Ydin Lopeta näppäimistöstä
SIGILL 4 Ydin Laittomia ohjeita
SIGABRT 6 Ydin Keskeytä signaali keskeytyksestä (3)
SIGFPE 8 Ydin Floating point poikkeus
SIGKILL 9 Termi Tapa signaali
SIGSEGV 11 Ydin Virheellinen muistin viite
SIGPIPE 13 Termi Rikki putki: kirjoita putkiin ilman lukijoita
SIGALRM 14 Termi Ajastussignaali hälytyksestä (2)
SIGTERM 15 Termi Päätyssignaali
SIGUSR1 30,10,16 Termi Käyttäjän määrittelemä signaali 1
SIGUSR2 31,12,17 Termi Käyttäjän määrittelemä signaali 2
SIGCHLD 20,17,18 Ign Lapsi pysähtyi tai lopetti
SIGCONT 19,18,25 Jatka, jos se pysähtyy
SIGSTOP 17,19,23 Stop Pysäytä prosessi
SIGTSTP 18,20,24 Stop Lopeta kirjoitettu tty: ssä
SIGTTIN 21,21,26 Stop tty syöttö taustaprosessille
SIGTTOU 22,22,27 Stop tty tuotos taustaprosessille

SIGKILLin ja SIGSTOPin signaaleja ei voida pitää kiinni, estää tai jättää huomiotta.

Seuraavaksi signaalit eivät ole POSIX.1-standardissa mutta kuvattu SUSv2 ja SUSv3 / POSIX 1003.1-2001.

signaali Arvo Toiminta Kommentti
SIGPOLL Termi Pollable tapahtuma (Sys V). SIGIOn synonyymi
SIGPROF 27,27,29 Termi Profiililaskuri on vanhentunut
SIGSYS 12, -, 12 Ydin Huono argumentti rutiinille (SVID)
SIGTRAP 5 Ydin Trace / breakpoint-ansa
SIGURG 16,23,21 Ign Kiireellinen tila pistorasiassa (4.2 BSD)
SIGVTALRM 26,26,28 Termi Virtuaalinen herätyskello (4.2 BSD)
SIGXCPU 24,24,30 Ydin CPU-aikaraja ylittyi (4.2 BSD)
SIGXFSZ 25,25,31 Ydin Tiedostokoon raja ylitetty (4.2 BSD)

SIGSYSin , SIGXCPU: n , SIGXFSZ : n ja (muiden arkkitehtuurien kuin SPARC: n ja MIPS: n) SIGBUS: n oletus käyttäytyminen, mukaan lukien Linux 2.2, oli lopettaa prosessi (ilman ydinkansiota ). (Joillakin muilla Unicesillä SIGXCPU: n ja SIGXFSZ: n oletustoiminto on lopettaa prosessi ilman ydinliputä .) Linux 2.4 noudattaa POSIX 1003.1-2001 -vaatimuksia näille signaaleille, lopettaen prosessin ytimen kaatopaikalle.

Seuraavat muut erilaiset signaalit.

signaali Arvo Toiminta Kommentti
SIGEMT 7, -, 7 Termi
SIGSTKFLT -, 16, - Termi Stack-vika koprocessorissa (käyttämättömänä)
SIGIO 23,29,22 Termi I / O nyt mahdollinen (4.2 BSD)
SIGCLD -, -, 18 Ign Synonyymi SIGCHLD: lle
SIGPWR 29,30,19 Termi Sähkökatkos (järjestelmä V)
SIGINFO 29, -, - Synonyymi SIGPWR: lle
SIGLOST -, -, - Termi Tiedoston lukitus menetetty
SIGWINCH 28,28,20 Ign Ikkunan kokoaaltosignaali (4.3 BSD, Aurinko)
SIGUNUSED -, 31, - Termi Käyttämätön signaali (tulee olemaan SIGSYS)

(Signaali 29 on SIGINFO / SIGPWR alfalla, mutta SIGLOST on sparcilla .)

SIGEMT: tä ei ole määritelty POSIX 1003.1-2001: ssä, mutta se näkyy useimmissa muissa Unice-järjestelmissä, sillä sen oletustoiminto on tyypillisesti päätettävä prosessi ydinpalautuksella.

SIGPWR (joka ei ole määritelty POSIX 1003.1-2001: ssa) jätetään yleensä oletusarvoisesti muille Unices-sivuille, joissa se näkyy.

SIGIO (jota ei ole määritelty POSIX 1003.1-2001: ssa) ohitetaan oletusarvoisesti useilla muilla Unices-laitteilla.

Reaaliaikaiset signaalit

Linux tukee reaaliaikaisia ​​signaaleja, kuten alun perin määritettiin POSIX.4-reaaliaikaisissa laajennuksissa (ja nyt POSIX 1003.1-2001). Linux tukee 32 reaaliaikaista signaalia, joiden numero on 32 ( SIGRTMIN ) ja 63 ( SIGRTMAX ). (Ohjelmien tulisi aina viitata reaaliaikaisiin signaaleihin merkinnällä SIGRTMIN + n, koska reaaliaikaisten signaalilukujen alue vaihtelee Unicesin välillä.)

Toisin kuin standardisignaaleilla, reaaliaikaisilla signaaleilla ei ole ennalta määriteltyjä merkkejä: koko reaaliaikaisen signaalin sarjaa voidaan käyttää sovelluksen määrittämissä tarkoituksissa. (Huomaa kuitenkin, että LinuxThreads-toteutus käyttää ensimmäisiä kolmea reaaliaikaista signaalia.)

Käsittelemättömän reaaliaikaisen signaalin oletustoiminto on päättää vastaanottoprosessi.

Reaaliaikaiset signaalit erotetaan seuraavista:

  1. Useita reaaliaikaisia ​​signaaleja voi olla jonoon. Sitä vastoin, jos usean standardisignaalin esiintymiä toimitetaan, kun signaali on tällä hetkellä tukossa, vain yksi tapaus on jonoon.
  2. Jos signaali lähetetään sigqueue (2) avulla, signaalin avulla voidaan lähettää mukanaoleva arvo (joko kokonaisluku tai osoitin). Jos vastaanottoprosessi muodostaa tämän signaalin käsittelijän käyttämällä SA_SIGACTION- lippua sigaction (2), se voi saada tämän datan sig_info_t- rakenteen si_value- kentän kautta, joka on siirretty toiseksi argumentiksi käsittelijälle. Lisäksi tämän rakenteen si_pid ja si_uid kenttiä voidaan käyttää signaalin lähettämisen prosessin PID ja todellisen käyttäjätunnuksen saamiseksi.
  3. Reaaliaikaiset signaalit toimitetaan taatussa järjestyksessä. Saman tyyppisiä reaaliaikaisia ​​signaaleja toimitetaan lähetysjärjestyksessä. Jos prosessille lähetetään erilaisia ​​reaaliaikaisia ​​signaaleja, ne toimitetaan lähtien pienimmillään olevasta signaalista. (Eli, pienillä numeroilla on ensisijainen merkitys.)

Jos sekä vakiotilaus- että reaaliaikaiset signaalit odottavat prosessia, POSIX jättää määrittelemättömän, joka toimitetaan ensin. Linux, kuten monet muut toteutukset, antaa etusijalle vakiosignaalit tässä tapauksessa.

POSIXin mukaan toteutuksen tulisi mahdollistaa ainakin _POSIX_SIGQUEUE_MAX (32) reaaliaikaiset signaalit jonossa prosessiin. Kuitenkin prosessin rajojen asettamisen sijaan Linux asettaa järjestelmäkohtaisen rajan kaikille reaaliaikaisille signaaleille kaikille prosesseille.

Tätä rajaa voidaan tarkastella (ja etuoikeudella) / proc / sys / kernel / rtsig-max -tiedoston kautta. Aiheeseen liittyvä tiedosto, / proc / sys / kernel / rtsig-max , voidaan selvittää, kuinka monta reaaliaikaista signaalia on jonossa.

TÄYDENTÄVÄ

POSIX.1

Tärkeää: Käytä man- komentoa ( % man ) nähdäksesi kuinka komentoa käytetään tietyssä tietokoneessa.