Skip to main content

Zapoznaj się z Linux Command Init

Process Management Commands (fg, bg, top, ps, kill, nice, renice, df, free) Linux Tutorial (Czerwiec 2026)

Process Management Commands (fg, bg, top, ps, kill, nice, renice, df, free) Linux Tutorial (Czerwiec 2026)
Anonim

W tym jest rodzicem wszystkich procesów Linux. Jest to pierwszy proces, który uruchamia się po uruchomieniu komputera i działa, dopóki system nie zostanie zamknięty. Jest przodkiem wszystkich innych procesów.

Jego podstawową rolą jest tworzenie procesów ze skryptu zapisanego w pliku / etc / inittab. Ten plik zwykle przechowuje wpisy, które powodują, że Init odradza się getty w każdej linii, do której użytkownicy mogą się logować. Kontroluje również autonomiczne procesy wymagane przez dowolny system.

Poziomy działania

ZA runlevel to konfiguracja oprogramowania systemu, która umożliwia wykonanie tylko wybranej grupy procesów. Procesy zainicjowane przez Init dla każdego z tych poziomów pracy są zdefiniowane w pliku / etc / inittab. Init może znajdować się w jednym z ośmiu poziomów pracy: od 0 do 6 i S lub s. Poziom pracy jest zmieniany przez posiadanie uprzywilejowanego użytkownika uruchamiającego Telinit, który wysyła odpowiednie sygnały do ​​Init, informując go, do którego poziomu pracy należy przejść.

Poziomy pracy 0, 1 i 6 są zarezerwowane. Runlevel 0 jest używany do zatrzymania systemu, runlevel 6 jest używany do ponownego uruchomienia systemu, a runlevel 1 jest używany do przejścia do trybu pojedynczego użytkownika. Poziom Runlevel nie jest przeznaczony do użycia bezpośrednio, ale zamiast tego przez skrypty, które są wykonywane po przejściu poziomu 1.

Poziomy pracy od 7 do 9 są również prawidłowe, ale nie są dobrze udokumentowane, ponieważ "tradycyjne" warianty Uniksa ich nie używają. Poziomy pracy S i s są takie same. Wewnętrznie są to aliasy dla tego samego poziomu uruchamiania.

Rozruch

Po tym jak Init zostanie wywołany jako ostatni krok sekwencji startowej jądra, szuka pliku / etc / inittab, aby sprawdzić, czy istnieje wpis typu initdefault . Pozycja initdefault określa początkowy poziom pracy systemu. Jeśli nie ma takiego wpisu (lub nie ma go / etc / inittab), poziom działania musi zostać wprowadzony w konsoli systemu.

Program Runlevel S lub s przenosi system do trybu pojedynczego użytkownika i nie wymaga pliku / etc / inittab. W trybie pojedynczego użytkownika powłoka główna jest otwierana w / dev / console.

Po przejściu do trybu pojedynczego użytkownika init odczytuje stany ioctl konsoli z /etc/ioctl.save. Jeśli ten plik nie istnieje, init inicjalizuje linię z szybkością 9600 bodów i ustawieniami CLOCAL. Gdy init opuszcza tryb pojedynczego użytkownika, przechowuje ustawienia ioctl konsoli w tym pliku, aby mógł ponownie użyć ich w następnej sesji pojedynczego użytkownika.

Przy pierwszym wejściu w tryb wielu użytkowników, Init wykonuje pozycje rozruchowe i rozruchowe, aby umożliwić systemom plików montowanie, zanim użytkownicy będą mogli się zalogować. Następnie przetwarzane są wszystkie wpisy odpowiadające poziomowi roboczemu.

Podczas uruchamiania nowego procesu Init najpierw sprawdza, czy plik / etc / initscript istnieje. Jeśli tak, używa tego skryptu, aby rozpocząć proces.

Za każdym razem, gdy dziecko się kończy, Init zapisuje fakt i powód jego śmierci w / var / run / utmp i / var / log / wtmp, o ile te pliki istnieją.

Zmiana poziomów działania

Po stworzeniu wszystkich wymienionych procesów, Init czeka na jeden z procesów potomnych, aby umrzeć, sygnał powerfail lub dopóki nie zostanie zasygnalizowany przez Telinit, aby zmienić poziom pracy systemu. Gdy wystąpi jeden z tych trzech warunków, ponownie przeanalizuje plik / etc / inittab. Nowe wpisy mogą być dodawane do tego pliku w dowolnym momencie. Jednak init nadal czeka na wystąpienie jednego z powyższych trzech warunków. Aby zapewnić natychmiastową odpowiedź, polecenie Telinit Q lub q może obudzić Init, aby ponownie zbadać plik / etc / inittab.

Jeśli Init nie jest w trybie pojedynczego użytkownika i otrzymuje sygnał powerfail (SIGPWR), odczytuje plik / etc / powerstatus. Następnie uruchamia polecenie oparte na zawartości tego pliku:

  • ZAWIEŚĆ): Zasilanie się nie udaje, UPS zapewnia moc. Wykonaj wpisy powerwait i powerfail.
  • DOBRZE): Moc została przywrócona, wykonaj wpisy powerokwait.
  • NISKA): Zasilanie się nie udaje, a zasilacz UPS jest rozładowany. Wykonaj wpisy powerfailnow.

Jeśli / etc / powerstatus nie istnieje lub zawiera coś innego niż litery F, O lub L, Init zachowuje się tak, jakby czytało literę F.

Użycie SIGPWR i / etc / powerstatus jest odradzane. Każdy, kto chce wejść w interakcję z Init, powinien użyć kanału kontrolnego / dev / initctl.

Gdy Init zostanie poproszony o zmianę poziomu działania, wysyła sygnał ostrzegawczy SIGTERM do wszystkich procesów, które są niezdefiniowane w nowym poziomie pracy. Następnie czeka pięć sekund na wymuszone zakończenie tych procesów za pomocą sygnału SIGKILL. Należy zauważyć, że Init zakłada, że ​​wszystkie te procesy i ich potomkowie pozostają w tej samej grupie procesów, która została dla nich utworzona przez Init. Jeśli jakikolwiek proces zmienia przynależność do grupy procesów, nie otrzymuje tych sygnałów. Takie procesy należy zakończyć oddzielnie.

Telinit

Telinit jest połączony z / sbin / init. Przyjmuje argument o długości jednego znaku i sygnalizuje Initowi wykonanie odpowiedniej akcji. Następujące argumenty służą jako wytyczne dla Telinitu:

  • 0, 1, 2, 3, 4, 5 lub 6: Powiedz Init, aby przełączyć na określony poziom uruchamiania.
  • a, b, c: Powiedz Init, aby przetwarzał tylko te wpisy pliku / etc / inittab, które mają poziom uruchamiania a, b lub c.
  • Q lub q: Powiedz Init, aby ponownie przeanalizował plik / etc / inittab.
  • S lub s: Powiedz Init, aby przejść do trybu pojedynczego użytkownika.
  • U lub u: Powiedz init, aby ponownie wykonał się (zachowując stan). Nie ma ponownego sprawdzania pliku / etc / inittab. Poziom uruchamiania powinien być S, s, 1, 2, 3, 4 lub 5; w przeciwnym razie żądanie zostanie po cichu zignorowane.

Telinit może również powiedzieć Initowi, jak długo powinien czekać między wysłaniem sygnałów SIGTERM i SIGKILL. Wartość domyślna to pięć sekund, ale tę wartość można zmienić za pomocą -t sek opcja.

Telinit może być wywoływany tylko przez użytkowników z odpowiednimi uprawnieniami.

Binarny init sprawdza, czy jest Init lub Telinit, patrząc na jego identyfikator procesu. Prawdziwym identyfikatorem procesu Init jest zawsze 1. Z tego wynika, że ​​zamiast wywoływać Telinit, osoba może używać Init jako skrótu.