Skip to main content

Suprasti "Linux" komandų init

Anonim

Init yra visų Linux procesų patronuojanti įmonė. Tai pirmasis procesas, kuris prasideda, kai kompiuteris įsirašo ir paleidžiamas, kol sistema išjungiama. Tai visų kitų procesų protėvis.

Jo pagrindinis vaidmuo yra kurti procesus iš scenarijaus, saugomo failo / etc / inittab. Šiame faile paprastai saugomi įrašai, dėl kurių Init gali sukelti gestus kiekvienoje eilutėje, kurią naudotojai gali prisijungti. Ji taip pat valdo bet kokios sistemos reikalaujamus autonominius procesus.

Runlevels

A veikimo lygis yra sistemos programinės įrangos konfigūracija, kuri leidžia atlikti tik pasirinktą procesų grupę. Init sukaupti procesai kiekvienam iš šių lygių yra apibrėžti failo / etc / inittab. Init gali būti viename iš aštuonių lygių: nuo 0 iki 6 ir S ar s. Darbo lygis pakeičiamas privilegijuoto vartotojo paleisti "Telinit", kuris siunčia atitinkamus signalus "Init", nurodydamas, kokį veikimo lygį reikia keisti.

0, 1 ir 6 veikimo lygiai yra rezervuoti. "Runlevel 0" naudojamas sistemos sustabdymui, "runlevel 6" naudojamas sistemos perkraunimui, o "runlevel 1" yra naudojamas sistemos įvedimui į vieno vartotojo režimą. "Runlevel S" neturėtų būti naudojamas tiesiogiai, o vietoj to - scenarijai, kurie paleidžiami įvedant 1 lygį.

Nuo 7 iki 9 veikimo lygiai taip pat galioja, nors jie nėra gerai dokumentuojami, nes "tradiciniai" Unix variantai jų nenaudoja. Runlevels S ir s yra vienodi. Viduje jie yra slapyvardžiai ta pačia darbo eiga.

Paleisti

Kai Init yra paskambinama kaip paskutinė branduolio įkrovos sekos pakopa, ji ieško failo / etc / inittab, kad įsitikintumėte, ar yra tipo įrašas initdefault . Initdefault įrašas nustato pradinį sistemos paleidimo lygį. Jei tokio įrašo nėra (arba ne visi / etc / inittab), sistemos konsolėje reikia įvesti paleidimo lygį.

"Runlevel S" arba "s" sistema perjungia vieno vartotojo režimą ir nereikalauja / etc / inittab failo. Vieno vartotojo režimu šakninis lukštas atidaromas / dev / console.

Įvedant vieno vartotojo režimą, init skaito konsolės ioctl būsenas iš /etc/ioctl.save. Jei šis failas neegzistuoja, init inicijuoja liniją 9600 bodu ir CLOCAL nustatymus. Kai init palieka vieno vartotojo režimą, šiame rinkmenoje konsolės ioctl parametrai išsaugomi, kad būtų galima juos pakartotinai naudoti kito vieno vartotojo seanso metu.

Pirmą kartą įvesdami daugiakryptį režimą, "Init" atlieka įkrovos ir įkrovos įrašus, kad failų sistemos galėtų būti prijungtos, kol vartotojai galės prisijungti. Tada visi įrašai, atitinkantys darbo lygį, yra apdorojami.

Pradedant naują procesą, Init pirmiausia patikrina, ar egzistuoja failo / etc / iniccript. Jei taip, jis naudoja šį scenarijų, kad pradėtų procesą.

Kiekvieną kartą, kai vaikas baigiasi, "Init" įrašo faktą ir priežastį, kodėl jis mirė: / var / run / utmp ir / var / log / wtmp, jei šie failai egzistuoja.

Keisti veikimo lygius

Po to, kai įvyksta visi nurodyti procesai, Init laukia vieno iš jo palikuonių procesų mirties, powerfail signalo arba tol, kol Telinit jam signalizuos, kad pakeis sistemos veikimo lygį. Kai įvyksta viena iš šių trijų sąlygų, ji persvarsto failą / etc / inittab. Naujus įrašus galite bet kuriuo metu pridėti prie šio failo. Tačiau init vis dar laukia vieno iš pirmiau minėtų trijų sąlygų. Jei norite pateikti momentinį atsakymą, komanda Telinit Q arba q gali pabusti Init, kad iš naujo išnagrinėtų failą / etc / inittab.

Jei "Init" nėra vieno vartotojo režime ir gauna "powerfail" signalą (SIGPWR), jis skaito failą / etc / powerstatus. Tada paleidžiama komanda, pagrįsta šio failo turiniu:

  • F (AIL): Maitinimas trikdo, UPS teikia maitinimą. Vykdykite "powerwait" ir "powerfail" įrašus.
  • GERAI): Galia buvo atkurta, paleidžiamas "powerokwait" įrašai.
  • L (OW): Maitinimas trūksta ir UPS turi mažą bateriją. Vykdyti powerfailnow įrašus.

Jei / etc / powerstatus neegzistuoja arba yra nieko kito nei raidės F, O, arba L, Init elgiasi taip, tarsi jis skaito raidę F.

Nenaudokite SIGPWR ir / etc / powerstatus naudojimo. Kiekvienas, kuris nori bendrauti su Init, turėtų naudoti / dev / initct valdymo kanalą.

Kai Init prašoma pakeisti veikimo lygį, jis persiunčia įspėjimo signalą SIGTERM visiems procesams, kurie nėra apibrėžti naujame darbo lygyje. Tada jis laukia penkias sekundes, kol priverstinai nutraukia šiuos procesus naudodami SIGKILL signalą. Atkreipkite dėmesį, kad "Init" daro prielaidą, kad visi šie procesai ir jų palikuonys išlieka toje pačioje procesų grupėje, kurią iš pradžių jiems sukurta "Init". Jei kuris nors procesas pakeičia proceso grupės priklausymą, jis negauna šių signalų. Tokie procesai turi būti nutraukti atskirai.

Telinit

Telinit yra susietas su / sbin / init. Tai užima vieno simbolio argumentą ir signalus Init, kad atliktų tinkamą veiksmą. Tolinieji argumentai tarnauja Telinit direktyvoms:

  • 0, 1, 2, 3, 4, 5 arba 6: Pasakyk Init, kad pereitumėte prie nurodyto paleidimo lygio.
  • a, b, c: Pasakyk Init, kad apdorotų tik tuos / etc / inittab failo įrašus, kurių veikimo lygis a, b arba c.
  • Q arba q: Pasakyk Init, kad pakartotinai peržiūrėtumėte failą / etc / inittab.
  • S arba s: Pasakyk Init, kad pereitumėte į vieno vartotojo režimą.
  • U arba tu: Pasakykite init, kad atliktumėte save (išsaugoti būseną). Failo / etc / inittab persvarstymas nevyksta. Ruožo lygis turėtų būti S, s, 1, 2, 3, 4 arba 5; kitaip prašymas tyliai ignoruojamas.

"Telinit" taip pat gali pasakyti "Init", kiek laiko jis turėtų palaukti tarp siunčiančių procesų signalų SIGTERM ir SIGKILL. Numatytasis yra penkias sekundes, tačiau šią vertę galima keisti su -t sek pasirinkimas.

"Telinit" gali būti naudojamas tik su atitinkamomis privilegijomis.

Init dvejetainiai patikrina, ar tai Init ar Telinit, žiūrėdamas į jo proceso ID. Tikrasis Init proceso ID visada yra 1. Iš to matyti, kad vietoj to, kad skambinti Telinit, asmuo gali naudoti "Init" kaip nuorodą.