Skip to main content

Rozumieť príkazu Linux Command Init

Anonim

init je rodičom všetkých procesov Linuxu. Je to prvý proces, ktorý sa spustí, keď sa počítač spustí a funguje, kým sa systém nevypne. Je to predchodca všetkých ostatných procesov.

Jeho hlavnou úlohou je vytvárať procesy zo skriptu uloženého v súbore / etc / inittab. Tento súbor zvyčajne ukladá položky, ktoré spôsobujú, že Init spúšťa gettys na každom riadku, ktorý sa môžu používatelia prihlásiť. Tiež kontroluje autonómne procesy požadované v ktoromkoľvek konkrétnom systéme.

runlevels

runlevel je softvérová konfigurácia systému, ktorá umožňuje vykonať iba vybranú skupinu procesov. Procesy vytvorené initom pre každú z týchto úrovní spustenia sú definované v súbore / etc / inittab. Init môže byť v jednej z ôsmich úrovní chodu: 0 až 6 a S alebo s. Riadiaca úroveň sa mení tak, že má privilegovaný užívateľ Telinit, ktorý vysiela príslušné signály do Initu a informuje o tom, ktorý runlevel sa má zmeniť.

Riadiace úrovne 0, 1 a 6 sú vyhradené. Runlevel 0 sa používa na zastavenie systému, úroveň spustenia 6 sa používa na reštartovanie systému a úroveň chodu 1 sa používa na získanie systému do režimu pre jedného používateľa. Runlevel S nie je určený na použitie priamo, ale skripty, ktoré sa vykonávajú pri vstupe na úroveň 1.

Riadiace úrovne 7 až 9 sú tiež platné, aj keď nie sú dobre zdokumentované, pretože "tradičné" varianty Unix ich nepoužívajú. Riadiace úrovne S a s sú rovnaké. Vnútorne ide o prezývky na rovnakej úrovni úloh.

zavedenie

Po vyvolaní Init ako posledného kroku zavádzacej sekvencie jadra hľadá súbor / etc / inittab a uvidí, či je zadaný typ initdefault , Vstup initdefault určuje počiatočnú úroveň spustenia systému. Ak takýto záznam neexistuje (alebo žiadny / etc / inittab vôbec), musí byť zadaná úroveň behu na systémovej konzole.

Runlevel S alebo s prenesie systém do režimu pre jedného používateľa a nevyžaduje súbor / etc / inittab. V režime jedného používateľa sa na súbore / dev / console otvorí koreňový shell.

Pri vstupe do režimu pre jedného používateľa init prečíta stĺpce ioctl konzoly z /etc/ioctl.save. Ak tento súbor neexistuje, init inicializuje riadok pri 9600 baudoch a nastaveniach CLOCAL. Keď init opustí režim pre jedného používateľa, ukladá nastavenia konzoly ioctl v tomto súbore, aby ich mohol znovu použiť pre ďalšiu reláciu pre jedného používateľa.

Keď prvýkrát vstúpite do režimu pre viacerých používateľov, Init vykoná bootovacie a bootwaitové záznamy, aby umožnil súborovým systémom pripojiť sa predtým, ako sa môžu používatelia prihlásiť. Potom sa spracujú všetky položky zodpovedajúce úrovni spustenia.

Pri spustení nového procesu Init najskôr skontroluje, či súbor / etc / initscript existuje. Ak áno, použije tento skript na spustenie procesu.

Zakaždým, keď dieťa skončí, Init zaznamená skutočnosť a dôvod úmrtia v / var / run / utmp a / var / log / wtmp za predpokladu, že tieto súbory existujú.

Zmena úrovní chodu

Potom, čo spustí všetky špecifikované procesy, Init čaká na zlyhanie jedného zo svojich potomkov, signálu napájania, alebo až kým nebude Telinit signalizovaný, aby zmenil úroveň chodu systému. Keď sa vyskytne jedna z týchto troch podmienok, prehodnotí súbor / etc / inittab. Do tohto súboru môžete kedykoľvek pridať nové položky. Init však stále čaká na to, aby nastala jedna z uvedených troch podmienok. Ak chcete poskytnúť okamžitú odpoveď, príkaz Telinit Q alebo q sa môže prebudiť na Init, aby znovu preskúmal súbor / etc / inittab.

Ak Init nie je v režime pre jedného používateľa a prijíma signál SIGPWR, číta súbor / etc / powerstatus. Potom spustí príkaz založený na obsahu tohto súboru:

  • F (AIL): Napájanie zlyháva, napájač dodáva napájanie. Vykonajte položky Powerwait a Powerfail.
  • O (K): Napájanie bolo obnovené, vykonať položky powerokwait.
  • L (OW): Napájanie zlyhá a napájač má nízku kapacitu batérie. Vykonajte položky powerfailnow.

Ak / etc / powerstatus neexistuje alebo obsahuje iné než písmená F, O alebo L, Init sa správa ako keby čítal písmeno F.

Využívanie SIGPWR a / etc / powerstatus sa odrádza. Každý, kto chce interagovať s Initom, by mal použiť kanál / dev / initctl.

Keď je Init požiadaná o zmenu úrovne spustenia, vyšle varovný signál SIGTERM do všetkých procesov, ktoré nie sú definované na novej úrovni spustenia. Potom čaká päť sekúnd, kým násilne ukončí tieto procesy pomocou signálu SIGKILL. Všimnite si, že Init predpokladá, že všetky tieto procesy a ich potomkovia zostávajú v tej istej skupine procesov, ktorú pôvodne vytvoril Init pre nich. Ak niektorý proces zmení svoju pridelenú skupinu procesných skupín, neobdrží tieto signály. Takéto procesy je potrebné ukončiť oddelene.

telinit

Telinit je prepojený s / sbin / init. Vyžaduje jeden-znakový argument a signalizuje Init vykonanie príslušnej akcie. Nasledujúce argumenty slúžia ako pokyny spoločnosti Telinit:

  • 0, 1, 2, 3, 4, 5 alebo 6: Povedzte Init, že prejdete na zadanú úroveň spustenia.
  • a, b, c: Povedzte Initovi, aby spracoval iba tie súbory / etc / inittab, ktoré majú úroveň spustenia a, b alebo c.
  • Q alebo q: Povedzte spoločnosti Init, že znova skontrolujete súbor / etc / inittab.
  • S alebo s: Povedzte Init pre prepnutie do režimu pre jedného používateľa.
  • U alebo u: Povedz init, aby sa znovu vykonal sám (zachovanie stavu). Neprekontroluje sa súbor / etc / inittab. Riadiaca úroveň by mala byť S, s, 1, 2, 3, 4 alebo 5; v opačnom prípade sa žiadosť mlčky ignoruje.

Spoločnosť Telinit môže tiež povedať spoločnosti Init, ako dlho by mala čakať medzi odosielaním signálov SIGTERM a SIGKILL. Predvolená hodnota je päť sekúnd, ale táto hodnota sa môže zmeniť pomocou tlačidla -t s voľba.

Telinit môžu byť vyvolané iba používateľmi s príslušnými oprávneniami.

Init binárne kontroluje, či je Init alebo Telinit, keď sa pozrie na ID procesu. Skutočný identifikátor ID procesu je vždy 1. Z toho vyplýva, že namiesto volania Telinitu môže osoba používať Init ako skratku.