Provided by:
manpages-pl_20060617-1_all 
NAZWA
init, telinit - sterowanie procesu inicjującego
SKŁADNIA
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t sekundy ] [ 0123456sSQqabcUu ]
OPIS
Init
Init jest przodkiem wszystkich procesów. Jego głównym zadaniem jest
stworzenie procesów w oparciu o skrypt zapisany w pliku /etc/inittab
(patrz też inittab(5)). Ten plik zawiera zwykle pozycje, które każą
procesowi init pomnażać getty na każdej linii, na które użytkownicy
mogą się zalogować. Kontroluje też samodzielne procesy, których
istnienie jest konieczne w danym systemie.
POZIOMY PRACY
Runlevel (poziom pracy) jest to konfiguracja oprogramowania systemu,
która pozwala zaistnieć tylko wytypowanym grupom procesów. Procesy
tworzone przez init dla każdego z tych poziomów są zdefiniowane w pliku
/etc/inittab. Init może być w jednym z ośmiu poziomów pracy: 0-6 i S
lub s. Poziom pracy jest zmieniany przez uruchomienie telinit przez
uprzywilejowanego użytkownika. telinit wysyła odpowiednie sygnały do
init, mówiące, w jaki tryb ma przejść.
Tryby pracy 0, 1, oraz 6 są zarezerwowane. Tryb 0 jest używany, by
zatrzymać system, tryb 6, by przeładować system (reboot), a tryb 1, by
wprowadzić system w tryb pracy jednego użytkownika (single-user mode).
Tryb S nie jest pomyślany dokładnie tak, by go używać bezpośrednio,
lecz raczej dla skryptów wykonywanych przy wchodzeniu w tryb 1. Aby
uzyskać więcej informacji na ten temat, zobacz strony podręcznika dla
shutdown(8) i inittab(5).
Tryby pracy 7-9 też są poprawne, choć niezbyt udokumentowane. To z
powodu "tradycyjnych" wariantów Uniksa nie używających ich. Jeśli
jesteś ciekaw, to wiedz, że poziomy S i s są w rzeczywistości takie
same. Wewnętrznie są to tylko zastępcze nazwy dla takich samych trybów
pracy.
BOOTOWANIE
Po tym jak init jest wywołany w ostatnim kroku sekwencji bootującej
jądra, szuka pliku /etc/inittab w celu znalezienia w nim pola typu
initdefault (patrz też inittab(5)). Pole initdefault określa początkowy
poziom pracy systemu. Jeśli nie ma tam takiego pola (lub wcale nie
istnieje /etc/inittab), poziom pracy musi być podany z konsoli
systemowej.
Poziom S lub s wprowadza system w tryb jednego użytkownika i nie wymaga
pliku /etc/initttab. W trybie jednego użytkownika, wywoływany jest
/sbin/sulogin na urządzeniu /dev/console.
Podczas wchodzenia w tryb jednego użytkownika, proces init inicjuje
ustawienia stty konsoli na bezpieczne wartości. Ustawiany jest tryb
clocal. Prędkość sprzętu i handshaking nie są zmieniane.
Podczas wchodzenia w tryb wielu użytkowników po raz pierwszy, init
wykonuje pozycje boot i bootwait, by pozwolić systemom plików
zamontować się zanim użytkownicy będą mogli się zalogować. Potem
wykonywane są wszystkie pozycje przypisane danemu poziomowi pracy.
Kiedy nowy proces startuje, init sprawdza najpierw, czy istnieje plik
/etc/initscript. Jeśli tak, używa tego skryptu by ten proces zacząć.
Za każdym razem, gdy proces potomny się zakończy, init zapamiętuje ten
fakt i powód śmierci procesu jest zapisany w /var/run/utmp i
/var/log/wtmp, pod warunkiem, że te pliki istnieją.
ZMIENIANIE TRYBÓW PRACY
Po tym jak "namnożone" zostaną wszystkie wyszczególnione procesy, init
czeka na śmierć każdego swojego procesu potomnego, sygnał braku energii
lub zasygnalizowanie przez telinit zmiany poziomu działania systemu.
Gdy wystąpi jeden spośród tych trzech warunków, ponownie sprawdzany
jest plik /etc/inittab, ponieważ nowe pola mogą być do niego dodane w
każdej chwili. Jednakowoż, init wciąż oczekuje na wystąpienie jednego z
tych trzech warunków. By przygotować się na natychmiastową odpowiedź,
telinit Q albo użyta komenda q może obudzić proces init, by jeszcze raz
przeczytał plik /etc/inittab.
Jeśli init nie jest w trybie jednego użytkownika i odbiera sygnał
zaniku energii (SIGPWR), czyta plik /etc/powerstatus. Następnie
uruchamia polecenie zależne od zawartości tego pliku:
F(AIL) Zawodzi zasilanie, UPS dostarcza mocy. Wykonuje wpisy powerwait
i powerfail.
O(K) Zasilanie powróciło, uruchamia wpisy powerokwait.
L(OW) Zasilanie zawodzi, a UPS-owi wyczerpuje się bateria. Wykonuje
wpisy powerfailnow.
Jeżeli plik /etc/powerstatus nie istnieje lub zawiera cokolwiek innego
niż jedną z liter F, O lub L, init zachowa się tak, jakby przeczytał F.
Używanie SIGPWR i /etc/powerstatus nie jest zalecane. Jeżeli ktoś chce
współdziałać z init-em, powinien użyć kanału kontroli /dev/initctl -
proszę przeczytać kod źródłowy pakietu sysvinit po więcej dokumentacji
dotyczącej tego kanału.
Gdy init jest proszony o zmianę poziomu działania, wysyła sygnał
ostrzegawczy SIGTERM do wszystkich procesów, które nie są zdefiniowane
w nowym poziomie pracy. Potem czeka 5 sekund zanim "na siłę" zakończy
te procesy poprzez sygnał SIGKILL. Zauważ, że init zakłada, że
wszystkie te procesy (i ich potomki) pozostają w tej samej grupie
procesów, którą init oryginalnie im utworzył. Jeżeli jakikolwiek proces
zmienił swą przynależność do grupy procesów to nie odbierze tych
sygnałów. Tego typu procesy muszą być kończone osobno (np. demony
wszelakie - przyp. tłum.).
TELINIT
/sbin/telinit jest symbolicznym dowiązaniem do /sbin/init. Pobiera on
jednoznakowy argument i sygnały init, by podjął stosowne działanie.
Poniższe argumenty można stosować jako rozkazy dla telinit:
0,1,2,3,4,5 lub 6
mówią procesowi init by przełączył w odpowiedni poziom
działania.
a,b,c każą procesowi init by przetwarzał tylko te pola pliku
/etc/inittab, które odnoszą się do poziomu pracy a,b lub c.
Q lub q
każą procesowi init jeszcze raz przeczytać plik /etc/inittab.
S lub s
mówią żeby init przełączył w tryb jednego użytkownika.
U lub u
każą procesowi init przeładować się (zachowując obecny stan).
Nie występuje ponowne odczytywanie pliku /etc/inittab. Poziom
pracy powinien być ustawiony na Ss12345, w przeciwnym wypadku
żądanie może być "delikatnie" zignorowane.
telinit może także powiedzieć procesowi init, jak długo powinien on
czekać między wysyłaniem sygnałów SIGTERM i SIGKILL. Domyślną wartością
jest 5 sekund, ale może być ona zmieniona za pomocą opcji -t sekundy.
telinit może być wywoływany tylko przez użytkowników uprzywilejowanych.
Wywołany init sprawdza czy jest procesem inicjującym init czy też jest
wywołany jako telinit poprzez wgląd w swój identyfikator procesu;
prawdziwy identyfikator procesu init ma zawsze wartość 1. Teraz już
wiadomo, że zamiast wywoływać telinit możesz też po prostu użyć init, a
nie skrótu.
ŚRODOWISKO
Init ustawia następujące zmienne środowiskowe dla wszystkich swoich
dzieci:
PATH /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
INIT_VERSION
Jak mówi nazwa - wersja programu. Użyteczne dla określenia,
jeśli skrypt uruchamia się bezpośrednio z init.
RUNLEVEL
Obecny poziom pracy systemu.
PREVLEVEL
Poprzedni poziom pracy systemu (użyteczne po zmianie poziomów).
CONSOLE
Konsola systemu. Tak naprawdę ta wartość jest przyjmowana od
jądra; jednak jeśli nie jest ustawiona init ustawi ją domyślnie
na /dev/console.
FLAGI STARTOWE
Jest możliwe by przekazać pewne flagi do procesu init z monitora
startowego (np. LILO). Init dopuszcza stosowanie następujących flag:
S, single
Bootowanie w trybie jednego użytkownika. W tym trybie /etc/inittab
jest sprawdzany (wczytywany) i skrypty startowe rc są zwykle
uruchamiane zanim wystartuje powłoka dla trybu jednego
użytkownika.
1-5 Poziom działania w jakim system ma wystartować.
-b, emergency
Wejście bezpośrednio w tryb jednego użytkownika bez uruchamiania
żadnych innych skryptów startowych.
-a, auto
Program ładujący LILO dodaje słowo "auto" do linii poleceń, jeżeli
uruchomił jądro z domyślną linią poleceń (użytkownik jej nie
zmieniał). Jeżeli init znajdzie to słowo, ustawi zmienną
środowiskową "AUTOBOOT" na "yes". Proszę zauważyć, że nie można
tego użyć jako środka bezpieczeństwa - oczywiści użytkownik mógł
ręcznie w linii poleceń wpisać "auto" użyć opcji -a.
-z xxx
Argument opcji -z jest ignorowany. Może być użyta do wydłużenia
linii poleceń, tak żeby zajmowała więcej miejsca na stosie. Init
może wtedy manipulować linią poleceń, tak żeby ps(1) pokazywało
bieżący tryb uruchomienia.
INTERFEJS
Init nasłuchuje wiadomości na łączu fifo w /dev, /dev/initctl. Telinit
używa tego do komunikacji z procesem init. Ten interfejs nie jest zbyt
dobrze udokumentowany czy skończony. Zainteresowani powinni
przestudiować plik initreq.h w podkatalogu src/ archiwum tarowego z
kodem źródłowym init.
SYGNAŁY
Init reaguje na następujące sygnały:
SIGHUP
Ma ten sam efekt co telinit q.
SIGUSR1
Po odebraniu tego sygnału, init zamyka i ponownie otwiera swoją
kontrolkę fifo, /dev/initctl. Użyteczne w przypadku skryptów
startowych, gdy przemontowywany jest katalog /dev.
SIGINT
Zwykle ten sygnał jest wysyłany z jądra by powiedzieć, że
wciśnięta została kombinacja klawiszy CTRL-ALT-DEL. Powoduje to
rozpoczęcie akcji ctrlaltdel.
SIGWINCH
Jądro wysyła ten sygnał jeśli wciśnięty został klawisz
KeyboardSignal. Aktywuje to akcję kbrequest.
ZGODNE Z
Init jest kompatybilny z init obecnym System V. Działa razem ze
skryptami w katalogach /etc/init.d i /etc/rc{poziom_dziaania}.d.
Jeśli twój system używa tej konwencji, to powinien być obecny plik
README w katalogu /etc/init.d wyjaśniający, jak te skrypty działają.
PLIKI
/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/dev/initctl
UWAGI
Init zakłada, że procesy i ich procesy potomne pozostają w tej samej
grupie procesów, która była dla nich oryginalnie stworzona. Jeżeli
jakikolwiek proces zmienił swą przynależność do grupy procesów, init
nie może ich zabić i może skończyć się na tym, że zostaną dwa procesy
czytające z jednej linii terminala.
DIAGNOSTYKA
Jeśli init zorientuje się, że wciąż powtarza namnażanie zadanego
procesu częściej niż 10 razy w ciągu 2 minut, wtedy założy, że gdzieś w
wywołaniu komendy jest błąd, wyśle wiadomość o błędzie na konsolę
systemu, i przerwie pomnażanie danego pola do upłynięcia 5 minut lub do
odebrania sygnału. Zapobiega to "zjadaniu" zasobów systemu gdy ktoś
popełni błąd typograficzny (bardziej po naszemu: "literówkę" - przyp.
tłum.) w pliku /etc/inittab lub gdy program normalnie uruchamiany dla
danego wpisu jest usunięty.
AUTOR
Miquel van Smoorenburg (miquels@cistron.nl), pierwszą wersję strony
podręcznika napisał Michael Haardt
(u31b3hs@pool.informatik.rwth-aachen.de).
PATRZ TAKŻE
getty(1), login(1), sh(1), runlevel(8), shutdown(8), kill(1),
inittab(5), initscript(5), utmp(5)
19 lipca 2004 INIT(8)