Kuidas kasutada Init käsku Linuxis

Init on kõigi protsesside vanem. Selle peamiseks ülesandeks on luua protsessid failis / etc / inittab salvestatud skripti (vt inittab (5)). Sellel failil on tavaliselt kirjeid, mis põhjustavad sisselülitamist igas rida, mida kasutajad saavad sisse logida. See kontrollib ka konkreetse süsteemi poolt nõutavaid autonoomseid protsesse.

Töötasemed

Töötasand on süsteemi tarkvarakomplekt, mis võimaldab ainult valitud protsesside rühma eksisteerida. Init jaoks loodud protsessid iga nende töötaseme kohta on määratletud / etc / inittab failis. Init võib olla ühes kaheksast töötasemest: 0-6 ja S või s . Töötasandit muudetakse privilegeeritud kasutaja käivitamise kaudu, mis saadab sisselogimiseks sobivad signaalid, öeldes, milline töötasemele see peaks muutuma.

Töötasemed 0 , 1 ja 6 on reserveeritud. Runlevel 0 kasutatakse süsteemi peatamiseks, käivitustaseme 6 kasutatakse süsteemi taaskäivitamiseks, ja süsteemi Runlevel 1 kasutatakse ühe kasutaja režiimi. Runlevel S ei ole tegelikult mõeldud otseselt kasutama, kuid rohkem skriptide puhul, mis käivituseeskirjas sisestamisel käivitatakse. Selle kohta lisateabe saamiseks vaadake peatükki shutdown (8) ja inittab (5).

Käitustasemed 7-9 kehtivad ka siis, kui seda ei ole tegelikult dokumenteeritud. Seda seetõttu, et "traditsioonilised" Unixi variandid neid ei kasuta. Kui olete uudishimulik, on joonised S ja s tegelikult samad. Sisemiselt on nad sama põlvkonna jaoks varjunimed.

Käivitamine

Kui init käivitatakse kerneli alglaadimissageduse viimase sammuna, otsib see fail / etc / inittab et näha, kas initdefault on olemas kirje (vt inittab (5)). Initdefault sissekanne määrab süsteemi esialgse käitustaseme. Kui sellist sisestust ei ole (või üldse mitte / etc / inittab ), tuleb süsteemikonsoolile sisestada töötasemestus.

Runlevel S või s toovad süsteemi ühe kasutaja režiimi ja ei nõua / etc / inittab faili. Ühe kasutaja režiimis avatakse juurkest / dev / konsool .

Ühe kasutaja režiimi sisenedes loeb init konsooli ioctl (2) olekuid /etc/ioctl.save . Kui seda faili ei eksisteeri, inits initsialiseerib rea 9600 boodi ja CLOCALi seadistustega. Kui init jätab ühe kasutaja režiimi, salvestab see selle faili konsooli ioctl seaded, nii et saab neid uuesti kasutada järgmise ühe kasutaja seansi jaoks.

Mitme kasutaja režiimi esimest korda sisenemisel käivitab init alglaadimise ja bootwait sissekanded, et võimaldada failisüsteemide paigaldamist, enne kui kasutajad saavad sisse logida. Seejärel töödeldakse kõiki käitustasemele vastavaid sisestusi.

Uue protsessi käivitamisel kontrollib init kõigepealt, kas fail / etc / initscript on olemas. Kui see toimub, kasutab see seda skripti protsessi käivitamiseks.

Iga kord, kui laps lõpeb, salvestab init selle fakt ja põhjus, miks ta suri / var / run / utmp ja / var / log / wtmp , tingimusel et need failid on olemas.

Töötasemete muutmine

Pärast seda, kui see on välja töötanud kõik täpsustatud protsessid, ootab init ootama ühte tema järeltulija protsessi surema, powerfail-signaali või kuni telinit signaliseerib selle, et muuta süsteemi töötaset. Kui esineb üks eespool nimetatud kolmest tingimustest, uurib ta uuesti / etc / inittab- faili. Uusi kirjeid saab igal ajal lisada sellele failile. Siiski ootab init ikkagi, et esineb üks eespool nimetatud kolmest tingimusest. Et anda hetkekõnet , saab telinit Q või q käivitada init, et / etc / inittab faili uuesti uurida.

Kui init ei ole ühe kasutaja režiimis ja võtab vastu powerfail signaali (SIGPWR), loeb see fail / etc / powerstatus . Seejärel käivitab käsk selle faili sisu järgi:

F (AIL)

Toide rikub, UPS annab võimsust. Käivita powerwait ja powerfail sissekanded.

OKEI)

Toide on taastatud, käivitatakse powerokwiate sisestused.

L (OW)

Toide rikub ja UPSil on vähe aku. Täitke powerfailnow kirjed.

Kui / etc / powerstatus ei ole olemas või sisaldab midagi muud kui tähed F , O või L , käivitab init nii, nagu oleks ta lugenud tähte F.

SIGPWRi ja / etc / powerstatu kasutamine ei sobi . Keegi, kes soovib suhelda init'iga, peaks kasutama juhtimiskanalit / dev / initctl - selle kohta lisateabe saamiseks vaadake sysviniti paketi lähtekoodi.

Kui init'il palutakse muuta töötaset, saadab ta hoiatussignaali SIGTERM kõikidele protsessidele, mis on uues töötasemes määratlemata. Seejärel ootab see 5 sekundit enne nende protsesside sunniviisilist lõpetamist SIGKILLi signaali abil. Pange tähele, et init eeldab, et kõik need protsessid (ja nende järeltulijad) jäävad samasse protsessirühmasse, mis on nende jaoks algselt loodud. Kui mis tahes protsess muudab protsessi grupi liitumist, siis ei saa neid signaale. Sellised protsessid tuleb lõpetada eraldi.

Telinit

/ sbin / telinit on seotud / sbin / init . See võtab ühekohalise argumendi ja annab signaali init, et teostada sobivat toimingut. Järgmised argumendid on telinitdirektiivideks :

0 , 1 , 2 , 3 , 4 , 5 või 6

öelge init, et minna määratud töötasemele.

a , b , c

ütle init, et töötleks ainult selliseid / etc / inittab failikirjeid, kus töötasa a , b või c .

Q või q

ütle init, et / etc / inittab fail uuesti uurida.

S või s

öelge init, et lülituda ühe kasutaja režiimi.

U või u

öelge init uuesti ennistama (riigi säilitamine). / Etc / inittab faili uuesti läbivaatamine ei toimu. Käitustaseme peaks olema üks Ss12345-st , vastasel juhul ignoreeritakse vaikimisi taotlust.

telinit võib ka öelda init, kui kaua peaks ootama SIGTERMi ja SIGKILLi signaale saatvate protsesside ootamist. Vaikimisi on 5 sekundit, kuid seda saab muuta -t sec valikuga.

Teliniti saab kasutada ainult asjakohaste õiguste kasutajad.

Esialgne binaarkontroll, kas see on init või telinit , vaadates selle protsessi id ; tegelik init protsessi ID on alati 1 . Sellest järeldub, et selle asemel, et telinit välja kutsuda, saab lihtsalt kasutada init asemel otseteed.