Как да използвате командата Init в Linux

Init е родител на всички процеси. Основната й роля е да създава процеси от скрипт, съхранен във файла / etc / inittab (виж inittab (5)). Този файл обикновено има записи, които причиняват init да се захващат getty на всеки ред, че потребителите могат да влезете в него. Той също така контролира автономни процеси, изисквани от всяка отделна система.

Нива

Ниво на изпълнение е софтуерна конфигурация на системата, която позволява да съществува само избрана група процеси. Процесите, генерирани от init за всяка от тези нива на изпълнение, са дефинирани в / etc / inittab файла. Init може да бъде в една от осемте нива на работа: 0-6 и S или s . Нивото на изпълнение се променя, като има привилегирован потребител, изпълняващ тенинит , който изпраща подходящи сигнали на init , като му казва кой ниво на управление трябва да се промени.

Направленията 0 , 1 и 6 са запазени. Runlevel 0 се използва за спиране на системата, ниво на изпълнение 6 се използва за рестартиране на системата, а ниво на изпълнение 1 се използва, за да се получи системата в режим на един потребител. Runlevel S не е предназначен да бъде използван директно, а повече за скриптовете, които се изпълняват при влизане на ниво 1. За повече информация вижте ръководствата за изключване (8) и inittab (5).

Стандартните нива от 7 до 9 също са валидни, въпреки че не са документирани. Това е така, защото "традиционните" варианти на Unix не ги използват. В случай, че сте любопитни, стартовете S и s са всъщност еднакви. Вътрешно те са псевдоними за една и съща runlevel.

зареждане

След като init се извиква като последната стъпка от последователността на зареждане на ядрото, тя търси файла / etc / inittab, за да види дали има запис от тип initdefault (вж. Inittab (5)). Първоначалният запис определя първоначалното ниво на изпълнение на системата. Ако няма такъв запис (или няма / etc / inittab изобщо), трябва да въведете ниво на изпълнение в системната конзола.

Runlevel S или s въвежда системата в режим на един потребител и не изисква файл / etc / inittab . В режим на един потребител, на / dev / конзола се отваря коренна обвивка.

При влизане в режим на един потребител init прочита състоянията на ioctl (2) на конзолата от /etc/ioctl.save . Ако този файл не съществува, init инициализира линията при 9600 baud и с CLOCAL настройки. Когато init оставя режим на единичен потребител, той съхранява настройките на ioctl на конзолата в този файл, така че да може да ги използва отново за следващата сесия на един потребител.

Когато влизате в режим за няколко потребители за първи път, init изпълнява записите за boot и bootwait , за да позволи файловите системи да бъдат монтирани, преди потребителите да могат да влязат в системата. Тогава всички записи, съвпадащи с ниво на изпълнение, се обработват.

При стартиране на нов процес init първо проверява дали файлът / etc / initscript съществува. Ако го направи, той използва този скрипт за стартиране на процеса.

Всеки път, когато детето прекрати, init записва факта и причината, поради която умря в / var / run / utmp и / var / log / wtmp , при условие, че тези файлове съществуват.

Промяна на нива на изпълнение

След като е заредил всички посочени процеси, първоначално чака един от потомствените си процеси да умре, сигнал за захранване или докато не бъде сигнализиран от telinit за промяна на нивото на работа на системата. Когато възникне някое от горепосочените три условия, той отново преглежда файла / etc / inittab . Към този файл могат да се добавят нови записи по всяко време. Въпреки това, init все още чака да се случи едно от горните три условия. За да осигури незабавен отговор, командата telinit Q или q може да събуди init, за да прегледа отново файла / etc / inittab .

Ако init не е в режим на един потребител и получава сигнал за захранване (SIGPWR), той чете файла / etc / powerstatus . След това той стартира команда, базирана на съдържанието на този файл:

F (АНЖ)

Мощността е неуспешна, UPS осигурява захранването. Изпълнете записите Powerwait и Powerfail .

ДОБРЕ)

Захранването е възстановено, изпълнявате записите powerokwait .

L (OW)

Захранването е неуспешно и UPS има ниска батерия. Изпълнете записите за powerfailnow .

Ако / etc / powerstatus не съществува или съдържа нищо друго освен буквите F , O или L , init ще се държи така, сякаш е прочел буквата F.

Използването на SIGPWR и / etc / powerstatus се обезсърчава. Някой, който иска да взаимодейства с init, трябва да използва канала за управление / dev / initctl - вижте изходния код на пакета sysvinit за повече документация за това.

Когато init се иска да промени нивото на изпълнение, той изпраща предупредителния сигнал SIGTERM към всички процеси, които не са дефинирани в новата нива на изпълнение. Тогава чака 5 секунди преди да ги прекрати чрез сигнала SIGKILL . Обърнете внимание, че init приема, че всички тези процеси (и техните потомци) остават в една и съща група от процеси, които първоначално са създадени за тях. Ако някой процес промени своята принадлежност към група от процеси, той няма да получи тези сигнали. Такива процеси трябва да бъдат прекратени отделно.

Telinit

/ sbin / telinit е свързан към / sbin / init . Това отнема едносимволен аргумент и сигнализира, че трябва да предприеме подходящо действие. Следните аргументи служат като директиви за завършване :

0 , 1 , 2 , 3 , 4 , 5 или 6

кажете init да премине към зададеното ниво на изпълнение.

а , Ь , с

кажете init да обработва само тези / etc / inittab файлови записи, които имат ниво на изпълнение a , b или c .

Q или q

кажете init да прегледате файла / etc / inittab .

S или s

кажете на init да превключи към режим за един потребител.

U или u

кажете на инита да се извърши отново (запазване на държавата). Не се извършва повторно разглеждане на файла / etc / inittab . Нивото на изпълнение трябва да е едно от Ss12345 , в противен случай заявката ще бъде мълчаливо игнорирана.

telinit може също да каже, колко време трябва да изчака между изпращането на сигналите SIGTERM и SIGKILL. По подразбиране е 5 секунди, но това може да се промени с опцията -t sec .

telinit могат да бъдат извиквани само от потребители с подходящи привилегии.

Първоначалните двоични проверки, ако е init или telinit, като погледнем идентификатора на процеса ; Идентификационният номер на истинския инит е винаги 1 . От това следва, че вместо да се нарича telinit, може да се използва и init като пряк път.