Како да ја користите командата Init во Linux

Init е родител на сите процеси. Неговата примарна улога е да создаде процеси од скрипта зачувана во датотеката / etc / inittab (види inittab (5)). Оваа датотека обично има записи кои предизвикуваат init да подигаат Getty s на секоја линија за која корисниците можат да се најават. Исто така ги контролира автономните процеси што се бараат од некој посебен систем.

Runlevels

А ниво на извршување е софтверска конфигурација на системот која дозволува да постои само избрана група на процеси. Процесите добиени со иницијалите за секоја од овие нивоа се дефинирани во датотеката / etc / inittab . Init може да биде во една од осумте подесувања: 0-6 и S или s . Извршувањето се менува со тоа што има привилегиран корисник да работи со telinit , кој испраќа соодветни сигнали за иницијализација , кажувајќи им на кој работен опсег може да се смени.

Извршувањето на нивоа 0 , 1 и 6 се задржани. Runlevel 0 се користи за запирање на системот, се извршува работната површина 6 за да се рестартира системот, а работното ниво 1 се користи за да се доведе системот во режим на еден корисник. Runlevel S не е навистина наменет директно да се користи, но повеќе за скриптите кои се извршуваат при влегувањето во извршна постапка 1. За повеќе информации за ова, видете ги деловниците за исклучување (8) и inittab (5).

Рулеви 7-9 се исто така валидни, иако навистина не се документирани. Ова е затоа што "традиционалните" Unix варијанти не ги користат. Во случај да сте љубопитни, runlevels S и s всушност се исти. Внатрешно тие се псевдоними за истиот работен лист.

Подигнување

По иницијалите се повикуваат како последен чекор од секвенцата за подигање на кернелот, бара датотеката / etc / inittab за да видат дали има влез од типот initdefault (види inittab (5)). Внесувањето на initdefault го одредува почетниот работен лист на системот. Ако не постои таков запис (или воопшто нема / etc / inittab ), на системската конзола мора да биде внесено работно ниво.

Runlevel S или s го доведуваат системот до еден корисник и не бараат датотека / etc / inittab . Во режим на еден корисник, root-от школка се отвора на / dev / конзола .

Кога влегуваат во еден корисник, init ги чита државите на ioctl (2) на конзолата од /etc/ioctl.save . Ако оваа датотека не постои, init иницијализира линијата на 9600 baud и со поставувања CLOCAL . Кога init остава еден корисник на владата, тој ги зачувува подесувањата на ioctl на конзолата во оваа датотека, за да може повторно да ги користи за следната сесија со еден корисник.

Кога првпат влегуваат во мулти-кориснички режим, init ги извршува записите за подигнување и bootwait за да овозможи инсталирање на датотечни системи пред да можат корисниците да се најават. Тогаш се обработуваат сите записи кои се совпаѓаат со извршното ниво.

Кога започнува нов процес, init прво проверува дали датотеката / etc / initscript постои. Ако го стори тоа, таа ја користи оваа скрипта за да го започне процесот.

Секој пат кога детето завршува, init го евидентира фактот и причината за која починала во / var / run / utmp и / var / log / wtmp , под услов да постојат овие датотеки.

Промена на нивоата на извршување

Откако ќе ги предизвика сите наведени процеси, init очекува еден од неговите процеси на потомци да умре, сигнал за моќност или додека не се сигнализира од telinit за промена на нивото на системот. Кога ќе се појави една од горенаведените три услови, повторно се прегледува датотеката / etc / inittab . Во оваа датотека може да се додадат нови записи во секое време. Сепак, init сè уште чека една од горенаведените три услови да се случи. За да се обезбеди моментален одговор, командата telinit Q или q може да се разбуди init за да ја преиспита датотеката / etc / inittab .

Ако init не е во режим на еден корисник и прима сигнал за моќност (SIGPWR), тој ја чита датотеката / etc / powerstatus . Потоа започнува команда врз основа на содржината на оваа датотека:

F (AIL)

Моќта е неуспешна, UPS-от обезбедува енергија. Изврши ги елементите за чекање и моќта .

ДОБРО)

Моќта е вратена, извршувај ги елементите за чекање .

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 . Потребен е еден карактер аргумент и сигнали init да се изврши соодветно дејство. Следниве аргументи служат како директиви за telinit :

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

кажете на иницијативата да се префрлите на зададеното ниво на извршување.

a , b , c

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

Q или q

кажете на иницијативата да ја преиспита датотеката / etc / inittab .

S или s

кажете на иницијативата за префрлување на режим на еден корисник.

У или у

кажете му на иницијативата повторно да се изврши (зачувување на државата). Не се преиспитува датотеката / etc / inittab . Изврши ниво треба да биде еден од Ss12345 , инаку барањето ќе биде тивко игнорирано.

telinit, исто така, може да каже иницијатива колку долго треба да чека меѓу процесите на испраќање сигналите SIGTERM и SIGKILL. Стандардно е 5 секунди, но ова може да се промени со опција -t sec .

telinit може да се повикаат само корисници со соодветни привилегии.

Иницијалната бинарна проверка дали е иницијализирана или telinit од страна на гледање на неговиот процес ID ; идентитетот на вистинскиот инит е секогаш 1 . Од ова следува дека наместо да се јавите на telinit, исто така, може да се користи иницијално како кратенка.