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.

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.

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
tapa -SIGTERM 4790.

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

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.

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:
- 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.
- 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.
- 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.