Init je rodič všech procesů v systému Linux. Je to první proces, kdy se počítač spustí a běží až do vypnutí systému. Je předkem všech ostatních procesů.
Jeho primární úlohou je vytvářet procesy ze skriptu uloženého v souboru / etc / inittab. Tento soubor zpravidla ukládá položky, které způsobují, že Init splaví gettys na každém řádku, který se uživatelé mohou přihlásit. Rovněž řídí autonomní procesy vyžadované kterýmkoli konkrétním systémem.
Úrovně chodu
A runlevel je softwarová konfigurace systému, která umožňuje provést pouze vybranou skupinu procesů. Procesy vytvořené Initem pro každou z těchto úrovní jsou definovány v souboru / etc / inittab. Init může být v jedné z osmi runlevels: 0 až 6 a S nebo s. Řídící úroveň se změní tím, že má privilegovaný uživatel běžící Telinit, který vysílá příslušné signály Initovi a říká, který runlevel se má změnit.
Úrovně chodu 0, 1 a 6 jsou vyhrazeny. Runlevel 0 se používá k zastavení systému, úroveň 6 se používá k restartování systému a úroveň 1 se používá k tomu, aby se systém dostal do režimu pro jednoho uživatele. Runlevel S není určen k použití přímo, ale skripty, které jsou spuštěny při zadávání úrovně runlevel 1.
Úrovně 7 až 9 jsou také platné, i když nejsou dobře zdokumentovány, protože "tradiční" varianty Unixu je nepoužívají. Úrovně S a s jsou stejné. Vnitřně jsou to aliasy pro stejnou úroveň úloh.
Zavádění
Po inicializaci Init jako posledního kroku zaváděcí sekvence jádra hledá soubor / etc / inittab a zjistí, jestli existuje záznam typu initdefault . Initdefault položka určuje počáteční hladinu systému. Pokud takový záznam neexistuje (nebo ne / etc / inittab vůbec), musí být zadána úroveň řízení na systémové konzoli.
Runlevel S nebo s převede systém do režimu pro jednoho uživatele a nevyžaduje soubor / etc / inittab. V režimu jednoho uživatele se na / dev / konzoli otevře kořenový shell.
Při zadávání režimu pro jednoho uživatele init přečte stavy ioctl konzoly z /etc/ioctl.save. Pokud tento soubor neexistuje, init inicializuje linku v síti 9600 baud a s nastavením CLOCAL. Když init opustí režim jednoho uživatele, ukládá nastavení ioctl konzoly do tohoto souboru, aby bylo možné je znovu použít pro další relaci jednoho uživatele.
Při prvním zadání režimu pro více uživatelů provede Init bootovací a bootwaitové záznamy, aby umožnil souborovým systémům připojit se předtím, než se uživatelé mohou přihlásit. Pak se zpracovávají všechny položky odpovídající úrovni řízení.
Při spuštění nového procesu Init nejprve zkontroluje, zda soubor / etc / initscript existuje. Pokud ano, použije tento skript k zahájení procesu.
Pokaždé, když dítě skončí, Init zaznamená skutečnost a důvod, proč zemřel v / var / run / utmp a / var / log / wtmp za předpokladu, že tyto soubory existují.
Změna provozních úrovní
Poté, co splňuje všechny zadané procesy, Init čeká na jeden ze svých potomků, aby zemřeli, signál z výpadku napájení nebo dokud nebude Telinit signalizován, aby změnil provozní úroveň systému. Když nastane jedna z těchto tří podmínek, přezkoumá soubor / etc / inittab. Do tohoto souboru můžete kdykoli přidat nové položky. Init však stále čeká na to, aby nastala jedna z výše uvedených tří podmínek. Chcete-li poskytnout okamžitou odpověď, může příkaz Telinit Q nebo q probudit Init, aby znovu zkontroloval soubor / etc / inittab.
Pokud Init není v režimu pro jednoho uživatele a přijme signál PowerFox (SIGPWR), čte soubor / etc / powerstatus. Potom spustí příkaz založený na obsahu tohoto souboru:
- SELHAT): Napájení selhalo, UPS poskytuje napájení. Proveďte položky Powerwait a powerfail.
- OK): Napájení bylo obnoveno, spustit položky powerokwait.
- NÍZKÝ): Napájení selhalo a UPS má vybitou baterii. Proveďte položky powerfailnow.
Pokud / etc / powerstatus neexistuje nebo obsahuje jiné než písmena F, O nebo L, Init se chová, jako by četl písmeno F.
Použití SIGPWR a / etc / powerstatus je odrazeno. Každý, kdo chce interagovat s Init, by měl použít kanál / dev / initctl.
Když je Init vyzván k změně úrovně běhu, odešle varovný signál SIGTERM do všech procesů, které jsou nedefinovány na nové úrovni. Poté čeká pět sekund, než násilně ukončuje tyto procesy pomocí signálu SIGKILL. Všimněte si, že Init předpokládá, že všechny tyto procesy a jejich potomci zůstávají ve stejné skupině procesů, kterou původně vytvořil Init pro ně. Pokud nějaký proces změní přidružení skupiny procesů, neobdrží tyto signály. Takové procesy je třeba ukončit zvlášť.
Telinit
Telinit je propojen s / sbin / init. Vyžaduje jeden znakový argument a signalizuje Init, že provede příslušnou akci. Následující argumenty slouží jako směrnice Telinitu:
- 0, 1, 2, 3, 4, 5 nebo 6: Řekněte Init, že chcete přepnout na zadanou úroveň běhu.
- a, b, c: Řekněte programu Init, že zpracovává pouze ty položky souboru / etc / inittab s úrovní run avel, b nebo c.
- Q nebo q: Řekněte aplikaci Init, abyste znovu zkontrolovali soubor / etc / inittab.
- S nebo s: Řekněte Init, že chcete přepnout do režimu pro jednoho uživatele.
- U nebo u: Řekněte init, aby se znovu spustil (zachování stavu). Neexistuje re-examining souboru / etc / inittab. Úroveň chodu by měla být S, s, 1, 2, 3, 4 nebo 5; v opačném případě bude žádost mlčky ignorována.
Telinit může společnosti Init také říct, jak dlouho má čekat mezi odesíláním signálů SIGTERM a SIGKILL. Výchozí hodnota je pět sekund, ale tato hodnota může být změněna pomocí tlačítka -t sec volba.
Telinit lze vyvolat pouze uživatelé s příslušnými oprávněními.
Init binární kontroluje, zda je Init nebo Telinit, když se podívá na ID procesu. Skutečné identifikační číslo ID procesu je vždy 1. Z toho vyplývá, že namísto volání Telinitu může osoba použít Init jako zkratku.




