init
init (z anglického initialization) je v informatice název programu v Unixu a unixových systémech, který je na počítači spuštěn jako první proces, a který následně spouští všechny ostatní procesy. Proces init je tak předek (ve smyslu rodič – potomek) všech dalších procesů, který má typické číslo procesu jedna (PID=1). Běží na pozadí jako démon, dokud není systém vypnut.
Charakteristika
V unixových systémech se funkčnost procesu init odchýlila zvyklostí v původních systémech Unix a jeho BSD. Nejrozšířenější současné linuxové distribuce (v roce 2016) používají místo tradičního modelu s programem init nástroj systemd, launchd nebo Upstart (viz níže), které jsou řízeny událostmi. Stále však existují distribuce (například Slackware), které používají klasické BSD-like spouštěcí skripty. Existují i distribuce, které používají své vlastní verze spouštěcích skriptů (např. Gentoo Linux).
I když má proces init číslo jedna (PID=1), není obvykle v linuxových distribucích dopravdy prvním procesem, který je spuštěn. Při startu jsou nejprve spouštěny nástroje initrd (nověji initramfs), které zajišťují zavedení modulů (ovladačů) pro obsluhu úložných zařízení (např. SCSI řadič nebo ovladač síťové karty při bezdiskovém startu). Po jejich ukončení je však proces číslo jedna nahrazen procesem init (nebo např. systemd), protože jádro operačního systému předpokládá, že rodič všech procesů bude mít PID=1 (např. při adopci sirotků nebo při double-fork, který používají při svém vzniku démoni).
Research Unix-style
Research Unix init spouštěl inicializaci v shellu umístěném v /etc/rc
. Neexistují zde žádné runlevely, jelikož /etc/rc
rozhoduje, které programy jsou initem spoustěny a řízeny. Největší výhodou takového systému je jeho jednoduchost a snadná úprava fungování initu. Nicméně je zde riziko, že nový software přidaný do systému bude vyžadovat změny již existujích souborů a hrozí, že se počítač nespustí správně či dokonce vůbec.
Runlevely
Operační Systém | Výchozí Runlevel |
---|---|
AIX | 2 |
Gentoo Linux | 3[1] |
HP-UX | 3 |
Slackware Linux | 3 |
Solaris | 3[2] |
Unix Systém V | 2 |
UnixWare | 3 |
Runlevely v System V popisují stavy počítače charakterizované běžícími procesy. Obvykle je 8 runlevelů – 0 až 6 a S. Z těchto osmi jsou tři tzv. „rezervované“:
- 0. Halt (vypnutí počítače)
- 1. Jednouživatelský mód
- 6. Reboot
- 1. Jednouživatelský mód
Kromě runlevelů 0, 1 a 6 každý Unix a Unix-like systém používá runlevely trochu jinak. Definice chování runlevelů se nachází typicky v /etc/inittab.
Výchozí Runlevely
V linuxových distribucích vyvolá runlevel 5 víceuživatelské grafické prostředí podporující X Window System, většinou s X display managerem jako je například GDM nebo KDM. Avšak například operační systém Solaris má runlevel 5 vyhrazen pro vypnutí počítače.
Ve většině systémů lze zjistit runlevel příkazem runlevel
nebo příkazem who -r
.[3]
Uživatel root může měnit runlevely pomocí příkazů telinit
nebo init
.
Náhrady za init
Jednou z hlavních příčin hledání náhrad za init
je fakt, že spouští skripty sériově. To znamená, že následující skript může být spuštěn až po dokončení předchozího skriptu, což může mít následek prodlevy při startu systému. Toto zpoždění lze zkrátit pomocí SSD disků, ale neřeší příčinu.
Byly provedeny různé snahy nahradit tradiční init
démony k řešení tohoto a dalších problémů, včetně:
- BootScripts v GoboLinux
- Initng, kompletní náhrada initu s možností spouštět skripty asynchronně
- launchd
- OpenRC
- runit
- Service Management Facility
- systemd
- SystemStarter
- Upstart
Reference
V tomto článku byl použit překlad textu z článku init na anglické Wikipedii.
- ↑ Initscripts [online]. Gentoo.org, 2011-03-02 [cit. 2016-09-19]. Dostupné online. (anglicky)
- ↑ Oracle Documentation [online]. Docs.sun.com, 2010-09-07 [cit. 2016-09-19]. Dostupné v archivu pořízeném dne 2007-08-18. (anglicky)
- ↑ UNIX man pages: runlevel (8) [online]. Unixhelp.ed.ac.uk, 1997-05-27 [cit. 2016-09-19]. Dostupné v archivu pořízeném dne 2014-07-14. (anglicky)