Skip to main content

Înțelegeți Init Command Linux

Calling All Cars: The 25th Stamp / The Incorrigible Youth / The Big Shot (Iunie 2026)

Calling All Cars: The 25th Stamp / The Incorrigible Youth / The Big Shot (Iunie 2026)
Anonim

init este părintele tuturor proceselor Linux. Este primul proces care pornește când un computer pornește și rulează până când sistemul se oprește. Este strămoșul tuturor celorlalte procese.

Rolul său principal este de a crea procese dintr-un script stocat în fișierul / etc / inittab. Acest fișier stochează, de obicei, intrări care determină Init să creeze gettys pe fiecare linie pe care utilizatorii o pot conecta. De asemenea, controlează procesele autonome solicitate de un anumit sistem.

runlevels

A nivel de execuție este o configurație software a sistemului care permite executarea numai a unui grup selectat de procese. Procesele generate de Init pentru fiecare dintre aceste runlevels sunt definite în fișierul / etc / inittab. Init poate fi în una din opt runlevels: 0 până la 6 și S sau s. Nivelul de execuție este modificat prin faptul că are un utilizator privilegiat care rulează Telinit, care trimite semnale corespunzătoare către Init, spunându-i la care runlevel să se schimbe.

Nivelurile de rulare 0, 1 și 6 sunt rezervate. Nivelul de execuție 0 este utilizat pentru a opri sistemul, nivelul de execuție 6 este utilizat pentru a reporni sistemul, iar nivelul de execuție 1 este folosit pentru a obține sistemul în modul de utilizator unic. Runlevel S nu este destinat utilizării în mod direct, ci în locul scripturilor care se execută la intrarea în nivelul 1.

Nivelurile de execuție de la 7 la 9 sunt, de asemenea, valide, deși nu sunt bine documentate deoarece variantele tradiționale de Unix nu le utilizează. Nivelurile S și s sunt aceleași. Pe plan intern, acestea sunt pseudonime pentru același nivel de execuție.

Bootare

După ce Init este invocat ca ultimul pas al secvenței de boot a kernel-ului, acesta caută fișierul / etc / inittab pentru a vedea dacă există o intrare a tipului initdefault . Intrarea inițială determină nivelul inițial de rulare al sistemului. Dacă nu există o astfel de intrare (sau nu / etc / inittab deloc), trebuie introdus un nivel de execuție la consola de sistem.

Runlevel S sau s duce sistemul la un singur utilizator și nu necesită un fișier / etc / inittab. În modul pentru un singur utilizator, pe / dev / consolă este deschisă o coajă rădăcină.

Când introduceți un singur mod de utilizator, init citește stările ioctl ale consolei din /etc/ioctl.save. Dacă acest fișier nu există, inițializează linia la 9600 baud și cu setările CLOCALE. Când init lasă un singur mod de utilizator, acesta stochează setările ioctl ale consolei în acest fișier, astfel încât să le poată reutiliza pentru următoarea sesiune de utilizatori.

Când introduceți pentru prima oară un modul cu mai mulți utilizatori, Init efectuează intrările de boot și bootwait pentru a permite sistemelor de fișiere să se monteze înainte ca utilizatorii să se poată loga. Apoi, toate intrările care se potrivesc nivelului de execuție sunt procesate.

Când începe un proces nou, Init verifică mai întâi dacă fișierul / etc / initscript există. Dacă da, utilizează acest script pentru a începe procesul.

De fiecare dată când un copil încetează, Init înregistrează și motivele pentru care a murit în / var / run / utmp și / var / log / wtmp, cu condiția să existe aceste fișiere.

Schimbarea nivelurilor de execuție

După ce a dat naștere tuturor proceselor specificate, Init așteaptă ca unul dintre procesele descendente să moară, un semnal de putere sau până când Telinit va fi semnalat pentru a schimba nivelul de funcționare al sistemului. Când apare una dintre aceste trei condiții, ea reexaminează fișierul / etc / inittab. Noile înregistrări pot fi adăugate în acest fișier în orice moment. Cu toate acestea, init încă așteaptă să apară una dintre cele trei condiții de mai sus. Pentru a furniza un răspuns instantaneu, comanda Telinit Q sau q poate să trezească programul Init pentru a reexamina fișierul / etc / inittab.

Dacă Init nu este în modul single-user și primește un semnal powerfail (SIGPWR), acesta citește fișierul / etc / powerstatus. Apoi pornește o comandă bazată pe conținutul acestui fișier:

  • F (AIL): Puterea eșuează, UPS furnizează energia. Executați intrările powerwait și powerfail.
  • O.K): Puterea a fost restabilită, executați intrările powerokwait.
  • SCĂZUT): Alimentarea este defectă și UPS-ul are o baterie descărcată. Executați intrările powerfailnow.

Dacă / etc / powerstatus nu există sau conține altceva decât literele F, O sau L, Init se comportă ca și cum ar fi scrisoarea F.

Utilizarea SIGPWR și / etc / powerstatus este descurajată. Oricine vrea să interacționeze cu Init ar trebui să utilizeze canalul de control / dev / initctl.

Când se solicită Init modificarea nivelului de execuție, acesta trimite semnalul de avertizare SIGTERM la toate procesele nedefinite în noul nivel de execuție. Apoi așteaptă cinci secunde înainte de a termina cu forța aceste procese utilizând semnalul SIGKILL. Rețineți că Init presupune că toate aceste procese și descendenții acestora rămân în același grup de procese pe care Init la creat inițial pentru ei. Dacă un proces modifică afilierea la grupul de procese, acesta nu primește aceste semnale. Astfel de procese trebuie terminate separat.

telinit

Telinit este legat la / sbin / init. Este nevoie de un argument de un caracter și semnalează Init pentru a efectua acțiunea corespunzătoare. Următoarele argumente servesc drept direcții către Telinit:

  • 0, 1, 2, 3, 4, 5 sau 6: Spuneți Init pentru a comuta la nivelul de rulare specificat.
  • a, b, c: Spuneți Init să proceseze numai acele intrări de fișiere / etc / inittab care au nivelul de execuție a, b sau c.
  • Q sau q: Spuneți-i lui Init să reexamineze fișierul / etc / inittab.
  • S sau s: Spuneți Init pentru a comuta la modul pentru un singur utilizator.
  • U sau u: Spuneți initului să se re-execute (păstrând statul). Nu se face reexaminarea fișierului / etc / inittab. Nivelul de execuție trebuie să fie S, s, 1, 2, 3, 4 sau 5; în caz contrar, cererea este tăcut ignorată.

Telinit poate de asemenea să-i spună lui Init cât trebuie să aștepte între trimiterea proceselor semnalele SIGTERM și SIGKILL. Valoarea implicită este de cinci secunde, dar această valoare poate fi modificată cu -t sec opțiune.

Telinit poate fi invocat numai de către utilizatorii cu privilegii corespunzătoare.

Verificările binare Init dacă este Init sau Telinit privindu-se ID-ul procesului. ID-ul real al procesului Init este întotdeauna 1. Din aceasta rezultă că, în loc să-l apelați pe Telinit, o persoană poate folosi Init ca o comandă rapidă.