Init-komennon käyttö Linuxissa

Init on kaikkien prosessien vanhempi. Sen ensisijaisena tehtävänä on luoda prosessit tiedostosta / etc / inittab (katso inittab (5)). Tässä tiedostossa on tavallisesti merkintöjä, jotka aiheuttavat init: n tuottamaan jokaiselle riville getty s: n, jonka käyttäjät voivat kirjautua sisään. Se myös valvoo itsenäisiä prosesseja, joita jokin järjestelmä tarvitsee.

ajotasoja

Runlevel on järjestelmän ohjelmistokokoonpano, joka mahdollistaa vain valitun prosessiryhmän olemassaolon. Init- prosessit, joita kukin näistä runleveloista kutsuvat, määritellään / etc / inittab -tiedostossa. Init voi olla jossakin kahdeksasta runlevels: 0-6 ja S tai s . Runlevelia muutetaan siten, että sillä on etuoikeutettu käyttäjän suoritettava telinit , joka lähettää asianmukaiset signaalit init: iin ja kertoo sille, mihin nousupisteeseen muutetaan.

Runlevelit 0 , 1 ja 6 ovat varattuja. Runlevel 0: ta käytetään järjestelmän pysäyttämiseen, runlevel 6: ta käytetään järjestelmän käynnistämiseen ja runlevel 1: ta käytetään järjestelmän yksinkertaiseen käyttöön. Runlevel S ei ole tosiasiallisesti tarkoitettu käytettäväksi suoraan, mutta enemmän komentosarjoille, jotka suoritetaan ajettaessa runlevel 1: een. Lisätietoja tästä löytyy shutdown (8) ja inittab (5) manpagesista.

Runlevels 7-9 ovat myös päteviä, vaikka ne eivät oikein dokumentoitu. Tämä johtuu siitä, että perinteiset Unix-versiot eivät käytä niitä. Jos olet utelias, runlevels S ja s ovat itse asiassa samat. Sisäisesti ne ovat aliaksia samalle runlevelle.

käynnistystä

Kun init on kutsuttu ytimen käynnistysjärjestyksen viimeisenä vaiheena, se etsii tiedostosta / etc / inittab , onko tyyppi initdefault -tyyppinen (katso inittab (5)). Initdefault- merkintä määrittää järjestelmän alkutason . Jos tällaista merkintää ei ole (tai ei ole / etc / inittab ollenkaan), runlevel on syötettävä järjestelmän konsoliin.

Runlevel S tai s tuo järjestelmän yksinkäyttäjätilaan eikä vaadi tiedostoa / etc / inittab . Yhtenäisen käyttäjän tilassa pääkäyttäjä avautuu / dev / konsoliin .

Kun syötät yhden käyttäjän tilan, init lukee konsolin ioctl (2) tilat /etc/ioctl.save . Jos tiedostoa ei ole, init alustaa linjan 9600 baudilla ja CLOCAL- asetuksilla. Kun init lähtee yhdestä käyttäjän tilasta, se tallentaa konsolin soittoasetukset tähän tiedostoon, jotta se voi käyttää niitä uudelleen seuraavaan yhden käyttäjän istuntoon.

Kun syötät monikäyttäjätilan ensimmäistä kertaa, init suorittaa käynnistys- ja käynnistyskäynnin merkinnät, jotta tiedostojärjestelmät voidaan asentaa ennen kuin käyttäjät voivat kirjautua sisään. Tällöin kaikki runlevelin vastaavia merkintöjä käsitellään.

Kun käynnistät uuden prosessin, init ensin tarkistaa onko tiedosto / etc / initscript olemassa. Jos se on, se käyttää tätä käsikirjoitusta aloittaakseen prosessin.

Joka kerta kun lapsi päätyy, init kirjaa tiedoston / var / run / utmp ja / var / log / wtmp syyn ja sen syyn, jos nämä tiedostot ovat olemassa.

Runlevelsin muuttaminen

Sen jälkeen, kun se on saanut kaikki määritetyt prosessit, init odotti jonkin sen jälkiprosessin kuolemista , tehonhäiriösignaalia tai kunnes telinit on ilmoittanut sen vaihtamasta järjestelmän runlevel. Kun jokin edellä mainituista kolmesta tilanteesta ilmenee, se tutkii uudelleen / etc / inittab- tiedoston. Voit lisätä uusia tiedostoja tähän tiedostoon milloin tahansa. Init kuitenkin odottaa kuitenkin, että jokin edellä mainituista kolmesta edellytyksestä tapahtuu. Jotta saadaan aikaan hetkellinen vaste, telinit Q tai q -komento voi herätä init uudelleen tarkastelemaan / etc / inittab- tiedostoa.

Jos init ei ole yksittäiskäyttäjätilassa ja vastaanottaa PowerFail-signaalin (SIGPWR), se lukee tiedoston / etc / powerstatus . Sen jälkeen käynnistää komennon, joka perustuu tämän tiedoston sisältöön:

F (AIL)

Virta ei toimi, UPS tarjoaa tehon. Suorita powerwait- ja powerfail- merkinnät.

O (K)

Teho on palautettu, suorita powerokwait- merkinnät.

MATALA)

Virta ei toimi, ja UPS-laitteessa on alhainen akku. Suorita powerfailnow- merkinnät.

Jos / etc / powerstatus ei ole tai sisältää mitään muuta, kirjaimet F , O tai L , init toimivat ikään kuin ne ovat lukeneet kirjaimen F.

SIGPWR: n ja / etc / powerstatuksen käyttöä ei suositella. Joku, joka haluaa olla vuorovaikutuksessa initin kanssa, tulee käyttää / dev / initctl -ohjauskanavaa - katso sysvinit- paketin lähdekoodia saadaksesi lisätietoja siitä.

Kun initia pyydetään vaihtamaan runlevel, se lähettää varoitussignaalin SIGTERM kaikkiin prosesseihin, jotka ovat määrittämättömiä uudessa runlevelissä. Sitten se odottaa 5 sekuntia ennen kuin nämä prosessit lopetetaan pakottamalla SIGKILL- signaalin kautta. Huomaa, että init olettaa, että kaikki nämä prosessit (ja niiden jälkeläiset) pysyvät samassa prosessiryhmässä, joka alun perin luotiin niille. Jos jokin prosessi muuttaa sen prosessiryhmän jäsenyyttä, se ei saa näitä signaaleja. Tällaiset prosessit on päätettävä erikseen.

Telinit

/ sbin / telinit on linkitetty / sbin / init . Se vaatii yhden merkin argumentin ja signaalit init suorittamaan tarvittavat toimenpiteet. Seuraavat väitteet ovat telinitin direktiivejä:

0 , 1 , 2 , 3 , 4 , 5 tai 6

kerro init vaihtaa määritettyyn suoritustasoon.

a , b , c

kerro init käsittelemään vain sellaisia / etc / inittab- tiedostojen merkintöjä, joilla on runlevel a , b tai c .

Q tai q

kerro init uudelleen tarkastelemaan / etc / inittab- tiedostoa.

S tai s

kerro init vaihtaa yksittäiseen käyttäjätapaan.

U tai u

kerro init uudelleenkäytä itse (valtion säilyttäminen). Tiedoston / etc / inittab- tiedoston uudelleentarkastusta ei tapahdu. Suoritetun tason pitäisi olla yksi Ss12345: sta , muutoin pyyntö olisi hiljaa jätetty huomiotta.

telinit voi myös kertoa init kuinka kauan se odottaa lähettävän prosessin välillä SIGTERM ja SIGKILL signaalit. Oletusasetus on 5 sekuntia, mutta tätä voidaan muuttaa -t sec -vaihtoehdolla.

Telinit voidaan kutsua vain käyttäjillä, joilla on asianmukaiset käyttöoikeudet.

Init- binaari tarkistaa, onko se init tai telinit tarkastelemalla sen prosessidunnusta ; Todellinen initin prosessidunnus on aina 1 . Tästä seuraa, että sen sijaan, että kutsumme telinitia, voimme myös käyttää init pikaviestinä pikemminkin.