Signaal — Linuxi/Unixi käsk

Linux toetab nii POSIX-i usaldusväärseid signaale (edaspidi "standardsignaalid") kui ka POSIX-i reaalajas signaale.

Signaalide kasutamine Linuxis

Linuxi süsteemi signaalid ütlevad operatsioonisüsteem kuidas käsitseda töötavat programmi või protsessi. Kui sulgete programmi tavapäraselt, saadab see tegelikult süsteemile signaali, mis käsib programmi sulgeda. Saate seda teha ka käsitsi.

Alustage protsessi otsimisega, mille soovite sulgeda. Seda saate teha järgmiste funktsioonidega:

ps aux | grep -i 

Seega, kui soovite Firefoxi käsurealt sulgeda, sisestage:

ps aux | grep -i firefox

Saate tohutu protsesside loendi Firefox sest see on mitmelõimeline rakendus. Otsige üles /usr/lib/firefox põhiprotsess. Tavaliselt on see esimene.

Linuxi protsesside loend Firefox

Kui leiate, et see on ülekaalukas, võite ka seda kasutada pgrep. See töötab sarnaselt, kuid annab teile ainult protsessi ID-d.

pgrep firefox. 

Madalaim protsessi ID on põhiprotsess, mida vajate.

Linux pgrep Firefox

Kui teil on see, leidke protsessi ID-number. Esimese asjana on alati protsessi käivitav kasutaja. Järgmine on protsessi ID. Kui see käes, saate saata a

SIGTERM andke protsessile märku selle peatamiseks, kasutades nuppu tappa käsk.

tapa -SIGTERM 4790. 
Linux SIGTERM Firefox

Igal signaalil on ka vastav number kiirkirja jaoks. SIGTERMi number on 15, nii et saate seda kasutada samamoodi nagu täissõna.

tapa -15 4790

SIGTERM on tegelikult tapmiskäsu vaiketoiming. Seetõttu ei pea te seda tegelikult üldse täpsustama. Kasutage lihtsalt:

tapa 4790

Saate täpselt sama tulemuse.

See on hea, kui protsess on tundlik, kuid tõenäoliselt ei lülita te reageerivat protsessi sel viisil välja, vähemalt mitte töölaual. Niisiis, mida te teete reageerimata protsessiga? Võimalikke signaale on palju. Parema ettekujutuse saamiseks, kui lai valik on, otsige neid üles.

tappa -l
Linuxi signaalide loend

Jah, neid on palju. Õnneks ei puuduta te valdavat enamust, välja arvatud juhul, kui hakkate süsteemihaldusskripte arendama või kirjutama. Enamasti, kui SIGTERM ei suuda reageerimata protsessi peatada, otsite Linuxi ekvivalenti Ctrl+Alt+Delete, SIGKILL.

Erinevalt kurikuulsast Ctrl+Alt+Delete protsessihaldurist SIGKILL tegelikult töötab. Tegelikult on see mõeldud kõigi muude tegurite ignoreerimiseks ja solvamise protsessi mahavõtmiseks, olenemata sellest. See tähendab ka, et SIGKILL võib olla ohtlik, kui teete protsessi valesti.

Alustage täpselt samamoodi, otsides protsessi ID-d.

pgrep firefox

Nüüd, selle asemel, et kasutada SIGTERMi protsessi peatamiseks, kasutage hävitavamat SIGKILLi.

tapa -SIGKILL 4790

Isegi kui protsess on täielikult lukustatud, peaks see mõne sekundi jooksul sulguma.

Linux SIGKILL Firefox

Nii nagu SIGTERMi puhul, on ka SIGKILLile vastav number. Sel juhul on see 9.

tapa -9 4790

Nagu varemgi, peaks protsess peaaegu kohe surnud olema.

Samuti peaksite olema teadlik SIGINT. See on klaviatuuri katkestus ja see on rohkem käsk, kui käsurealt arvate. Kui vajutate Ctrl+C protsessi peatamiseks terminaliaknast väljastate tegelikult SIGINT. Selle kood on 2, ja saate seda kasutada nagu teisigi käsuga kill.

tapa -2 4790

See ei ole liiga tavaline, kuna lähete sellega palju tõenäolisemalt kaasa Ctrl+C, kuid hea on sellest teadlik olla.

Need on vaieldamatult kõige levinumad signaalid, mida oma igapäevases Linuxi kasutamises kohtate. Teiste signaalide tehnilisema jaotuse saamiseks jätkake järgmise jaotisega.

Tehnilised üksikasjad

Kui olete süsteemiadministraator või soovite Linuxi jaoks arendada, soovite tõenäoliselt sukelduda Linuxi signaalisüsteemi tehnilistesse üksikasjadesse. Järgmises jaotises uuritakse Linuxi signaalide täielikku tehnilist jaotust. Te ei vaja seda teavet Linuxi töölaual kasutamiseks, kuid kui kavatsete uurida süsteemi sisemisi toiminguid, võib see osutuda hindamatuks.

Standardsed signaalid

Linux toetab allpool loetletud standardsignaale. Mitmed signaalinumbrid sõltuvad arhitektuurist, nagu on näidatud veerus "Väärtus". (Kui on antud kolm väärtust, siis esimene kehtib tavaliselt alfa ja sparci jaoks, keskmine i386, ppc ja sh ning viimane mips jaoks. A – näitab, et vastaval arhitektuuril signaal puudub.)

Kirjed tabeli veerus "Action" määravad signaali vaiketoimingu järgmiselt:

Tähtaeg: Vaikimisi toiming on protsessi lõpetamine.

Ign: Vaikimisi on signaali ignoreerimine.

Tuum: Vaikimisi toiming on protsessi lõpetamine ja tuum tühjendamine.

Peatus: Vaikimisi toiming on protsessi peatamine.

Esiteks algses POSIX.1 standardis kirjeldatud signaalid.

Signaal Väärtus Tegevus kommenteerida
või juhtimisprotsessi surm
SIGINT 2 Tähtaeg Katkestage klaviatuurilt
SIGQUIT 3 Tuum Väljuge klaviatuurist
SIGILL 4 Tuum Ebaseaduslik juhendamine
SIGABRT 6 Tuum Katkesta signaal kasutajalt katkestada(3)
SIGFPE 8 Tuum Ujukoma erand
SIGKILL 9 Tähtaeg Tapmissignaal
SIGSEGV 11 Tuum Vigane mäluviide
SIGPIPE 13 Tähtaeg Katkine toru: kirjutage torusse ilma lugejateta
SIGALRM 14 Tähtaeg Taimeri signaal alates äratus(2)
SIGTERM 15 Tähtaeg Lõpetamissignaal
SIGUSR1 30,10,16 Tähtaeg Kasutaja määratud signaal 1
SIGUSR2 31,12,17 Tähtaeg Kasutaja määratud signaal 2
SIGCHLD 20,17,18 Ign Laps peatatud või lõpetatud
SIGCONT 19,18,25 Jätkake, kui peatute
SIGSTOP 17,19,23 Peatus Peatage protsess
SIGTSTP 18,20,24 Peatus Lõpeta tty trükkimine
SIGTTIN 21,21,26 Peatus tty sisend taustprotsessi jaoks
SIGTTOU 22,22,27 Peatus tty väljund taustprotsessi jaoks

Signaalid SIGKILL ja SIGSTOP ei saa kinni püüda, blokeerida ega ignoreerida.

Järgmiseks signaalid, mis ei ole standardis POSIX.1, vaid mida on kirjeldatud standardites SUSv2 ja SUSv3 / POSIX 1003.1-2001.

Signaal Väärtus Tegevus kommenteerida
SIGPOLL Tähtaeg Pollitav sündmus (Sys V). SIGIO sünonüüm
SIGPROF 27,27,29 Tähtaeg Profileerimise taimer on aegunud
SIGSYS 12,-,12 Tuum Rutiini halb argument (SVID)
SIGTRAP 5 Tuum Jälgi/murdepunkti lõks
SIGURG 16,23,21 Ign Kiireloomuline seisund pistikupesas (4.2 BSD)
SIGVTALRM 26,26,28 Tähtaeg Virtuaalne äratuskell (4,2 BSD)
SIGXCPU 24,24,30 Tuum CPU ajalimiit ületatud (4,2 BSD)
SIGXFSZ 25,25,31 Tuum Faili suuruse limiit on ületatud (4,2 BSD)

Kuni Linux 2.2 (kaasa arvatud) vaikekäitumine jaoks SIGSYS, SIGXCPU, SIGXFSZja (muudel arhitektuuridel peale SPARC ja MIPS) SIGBUS pidi protsessi lõpetama (ilma põhiprügita). (Mõnede teiste Unicesi puhul on vaiketoiming SIGXCPU ja SIGXFSZ on lõpetada protsess ilma tuum dumpita.) Linux 2.4 vastab nende signaalide POSIX 1003.1-2001 nõuetele, lõpetades protsessi tuumade tühjendamisega.

Järgmiseks mitmesugused muud signaalid.

Signaal Väärtus Tegevus kommenteerida
SIGEMT 7,-,7 Tähtaeg
SIGSTKFLT -,16,- Tähtaeg Kaasprotsessori virna viga (kasutamata)
SIGIO 23,29,22 Tähtaeg I/O nüüd võimalik (4,2 BSD)
SIGCLD -,-,18 Ign SIGCHLD sünonüüm
SIGPWR 29,30,19 Tähtaeg Elektrikatkestus (süsteem V)
SIGINFO 29,-,- SIGPWR sünonüüm
SIGLOST -,-,- Tähtaeg Faililukk kadunud
SIGWINCH 28,28,20 Ign Akna suuruse muutmise signaal (4,3 BSD, päike)
KASUTATUD -,31,- Tähtaeg Kasutamata signaal (saab SIGSYS)

(Signaal 29 on SIGINFO / SIGPWR alfa aga SIGLOST sädeme peal.)

SIGEMT ei ole POSIX 1003.1-2001 määratletud, kuid sellegipoolest ilmub see enamikus teistes Unice'ides, kus selle vaiketoiminguks on tavaliselt protsessi lõpetamine core dump'iga.

SIGPWR (mida pole POSIX 1003.1-2001 täpsustatud) ignoreeritakse tavaliselt vaikimisi teistes Unice'ides, kus see kuvatakse.

SIGIO (mida POSIX 1003.1-2001 ei täpsusta) ignoreeritakse vaikimisi mitmes teises Unice'is.

Reaalajas signaalid

Linux toetab reaalajas signaale, nagu algselt määratleti POSIX.4 reaalajas laiendustes (ja nüüd sisaldub POSIX 1003.1-2001). Linux toetab 32 reaalajas signaali, nummerdatud alates 32 (SIGRTMIN) kuni 63 (SIGRTMAX). (Programmid peaksid alati viitama reaalajas signaalidele, kasutades tähistust SIGRTMIN+n, kuna reaalajas signaalide numbrite vahemik on Unice'is erinev.)

Erinevalt tavalistest signaalidest ei ole reaalajas signaalidel etteantud tähendust: kogu reaalajas signaalide komplekti saab kasutada rakenduse määratletud eesmärkidel. (Pange siiski tähele, et LinuxThreadsi rakendus kasutab kolme esimest reaalajas signaali.)

Käsitlemata reaalajas signaali vaiketoiming on vastuvõtuprotsessi lõpetamine.

Reaalajas signaale eristatakse järgmiselt:

  1. Järjekorda saab panna mitu reaalajas signaali eksemplari. Seevastu kui standardsignaali mitu eksemplari edastatakse sel ajal, kui see signaal on hetkel blokeeritud, on järjekorda ainult üks eksemplar.
  2. Kui signaal saadetakse kasutades järjekord(2) saab koos signaaliga saata kaasneva väärtuse (kas täisarv või osuti). Kui vastuvõtuprotsess loob sellele signaalile töötleja, kasutades SA_SIGACTION liputage sigaktsioon(2), siis saab ta need andmed hankidasi_value valdkonnas siginfo_t struktuur edastati teise argumendina käitlejale. Lisaks on si_pid ja si_uid selle struktuuri välju saab kasutada signaali saatva protsessi PID ja tegeliku kasutaja ID saamiseks.
  3. Reaalajas signaalid tarnitakse garanteeritud järjekorras. Mitu sama tüüpi reaalajas signaali edastatakse nende saatmise järjekorras. Kui protsessile saadetakse erinevaid reaalajas signaale, edastatakse need alates madalaima numbriga signaalist. (S.t madala numbriga signaalidel on kõrgeim prioriteet.)

Kui protsessi jaoks on ootel nii standardsed kui ka reaalajas signaalid, jätab POSIX määramata, kumb edastatakse esimesena. Linux, nagu paljud teised teostused, eelistab sel juhul standardseid signaale.

Vastavalt POSIX-ile peaks rakendus võimaldama protsessile järjekorda seada vähemalt _POSIX_SIGQUEUE_MAX (32) reaalajas signaali. Protsessipõhise piirangu seadmise asemel kehtestab Linux aga süsteemiülese piirangu järjekorda pandud reaalajas signaalide arvule kõigi protsesside jaoks. Seda limiiti saab vaadata (ja privileegiga) muuta /proc/sys/kernel/rtsig-max faili. Seotud fail,/proc/sys/kernel/rtsig-max, saab kasutada selleks, et teada saada, kui palju reaalajas signaale on hetkel järjekorras.

VASTAVUS.

POSIX.1.

Kasuta mees käsk (% meest), et näha, kuidas teie arvutis käsku kasutatakse.