Линукс дээр Init Command-г хэрхэн ашиглах талаар

Init нь бүх үйл явцын эцэг эх юм. Үндсэн үүрэг нь / etc / inittab файлд хадгалагдсан скриптээс процессуудыг үүсгэх явдал юм ( inittab (5) -ийг үзнэ үү). Энэ файл нь ихэвчлэн init нь хэрэглэгчээс нэвтэрч байгаа мөр бүр дээр getty- үүдийг үүсгэдэг шалтгаануудыг агуулсан байдаг. Мөн энэ нь бас ямар нэгэн системээр шаарддаг бие даасан процессуудыг хянадаг.

Runlevels

Runlevel нь зөвхөн сонгосон бүлгийн процессуудыг зөвшөөрдөг системийн програм хангамжийн тохиргоо юм. Эдгээр рутерс бүрт init- ээр хийгдсэн процессууд нь / etc / inittab файлд тодорхойлогдсон байдаг. Init нь 8 давхруудын нэг байж болно: 0-6 , S эсвэл s . Runlevel нь хэрэглэгчдэд зориулж ажиллуулах эрхтэй ажиллуулдаг telinit- ээр өөрчилдөг бөгөөд энэ нь init-д тохирох дохио илгээдэг бөгөөд энэ нь ямар түвшиний өөрчлөлтийг өгдөг талаар өгүүлэх болно.

Runlevels 0 , 1 , ба 6 нь нөөцлөгдсөн. Runlevel 0 системийг зогсооход ашигладаг, runlevel 6 нь системийг дахин ачаалахад ашиглагддаг бөгөөд 1-р түвшний модулийг системийг ганц хэрэглэгчийн горимд шилжүүлэхэд ашигладаг. Runlevel S нь яг үнэндээ шууд ашиглагдахгүй, харин runlevel 1-т ороход гүйцэтгэгддэг скриптүүдийн хувьд илүү. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл shutdown (8) болон inittab (5) -ийн manpages -г үзнэ үү.

Runlevels 7-9 нь хүчинтэй ч гэсэн баримтжуулагдаагүй. Энэ нь "уламжлалт" Unix-ийн хувилбарууд үүнийг ашигладаггүйтэй холбоотой юм. Хэрэв та сонирхож байгаа бол S ба runlevels яг адилхан юм. Дотооддоо бол тэдгээрийн ижил түвшний хоосон зай юм.

Ачаалах

Init нь цөмийн ачаалах дарааллын сүүлийн алхам болж дуудагдсаны дараа төрөл initdefault гэсэн оруулга байгаа эсэхийг харахын тулд / etc / inittab файлыг хайдаг ( inittab (5) -ийг үзнэ үү). Initdefault оруулга нь системийн эхний түвшинг тодорхойлно. Хэрэв иймэрхүү бүртгэл алга байна (эсвэл / etc / inittab -г байхгүй гэж үзсэн бол) системийн түвшиний консол дээр байх ёстой.

Runlevel S эсвэл системийг ганц хэрэглэгчийн горимд шилжүүлдэг бөгөөд / etc / inittab файл шаарддаггүй. Ганц хэрэглэгчийн горимд root бүрхүүл / dev / консол дээр нээгдсэн байдаг.

Ганц хэрэглэгчийн горимд ороход init нь /etc/ioctl.save файлаас консолын ioctl (2) төлөвийг уншина . Хэрэв энэ файл байхгүй бол init шугамыг 9600 baud болон CLOCAL тохируулгаар эхлүүлнэ. Хэрэв init ганц хэрэглэгчийн горимыг орхиж байвал энэ нь файл дахь консолын ioctl тохируулгуудыг хадгалдаг тул тэдгээрийг дараагийн ганц хэрэглэгчийн сессийг дахин ашиглаж болно.

Эхний удаа олон-хэрэглэгчийн горимд орохдоо хэрэглэгчид нэвтэрч орохоос өмнө файлын системүүдийг холбохыг зөвшөөрөхийн тулд ачаалах болон bootwait оруулгуудыг ажиллуулдаг.

Шинэ процессийг эхлүүлэх үед init эхлүүлэх / etc / initscript файл байгаа эсэхийг шалгана. Хэрэв энэ нь энэ скриптийг процессийг эхлүүлэхэд ашигладаг.

Хүүхэд бүрмэгдэж байх үед init эдгээр файлууд байгаа нөхцөлд / var / run / utmp болон / var / log / wtmp -д алдаа гарсан тухай болон баримтыг бичдэг .

Runlevels-ийг өөрчлөх

Тодорхойлолт хийгдсэн бүх процессуудыг ажиллуулсны дараа init нь түүний удмын процессыг үхэх, хүч дамжуулах сигнал хүлээж авах, эсвэл телинитээр дохиогоор дохио өгөхөөр хүлээнэ . Дээрх гурван нөхцлийн аль нэг нь / etc / inittab файлыг дахин шалгадаг. Шинэ бүртгэлийг энэ файлд хэдийд ч нэмж болно. Гэхдээ init нь дээр дурдсан гурван нөхцлийн аль нэгийг хүлээж байна. Шуурхай хариу өгөхийн тулд telinit Q эсвэл q тушаал нь / etc / inittab файлыг дахин шалгадаг.

Хэрэв init ганц хэрэглэгчийн горимд байдаггүй бөгөөд powerfail дохио (SIGPWR) хүлээн авбал / etc / powerstatus файлыг уншдаг. Дараа нь энэ файлын агуулгыг үндэслэн командыг эхлүүлнэ:

F (AIL)

Эрчим хүч болоогүй, UPS хүч чадлыг өгдөг. Powerwait болон powerfail оруулгуудыг ажиллуулна.

БОЛЖ БАЙНА УУ)

Эрчим хүч сэргээгдэж, powerokwait оруулгуудыг ажиллуулдаг.

L (OW)

Хүч чадалгүй, UPS бага зайтай. Powerfailnow оруулгуудыг ажиллуулна.

Хэрэв / etc / powerstatus байхгүй эсвэл өөр ямар нэгэн зүйлс агуулагдсан бол F , O эсвэл L үсэгнүүд нь init F үсэг уншсан шиг ажиллах болно.

SIGPWR болон / etc / powerstatus-ийн хэрэглээ урам хугардаггүй. Хэрвээ хэн нэгэнтэй харилцан ажиллах хүсэлтэй байгаа бол / dev / initctl хяналтын сувгийг ашиглах хэрэгтэй. Энэ тухай дэлгэрэнгүй мэдээллийг sysvinit багцын эх кодыг үзнэ үү.

Температурыг өөрчлөхийг init хүсэж байгаа үед шинэ түвшинд тодорхойгүй бүх үйл явцуудад SIGTERM анхааруулах дохиог илгээдэг. Дараа нь эдгээр үйл явцуудыг SIGKILL дохионоор хүчээр цуцалж 5 секунд хүлээж байна. Init нь эдгээр процессууд (болон түүний үр удмууд) тэдгээрт зориулж init анх үүсгэсэн ижил процессийн бүлэгт хэвшсэн гэдгийг санаарай. Хэрэв ямар нэгэн үйл явц нь процессийн бүлгийн хамаарлыг өөрчилбөл энэ дохиог хүлээн авахгүй болно. Ийм процессыг тусад нь цуцлах хэрэгтэй.

Телинит

/ sbin / telinit нь / sbin / init- тай холбоотой байдаг. Энэ нь нэг тэмдэгт бүхий нэмэлт өгөгдлүүдийг шаарддаг бөгөөд зохих дохиололыг init хийхэд хүргэдэг. Дараах нэмэлт өгөгдлүүд нь telinit- д зориулагдсан удирдамж болж өгдөг :

0 , 1 , 2 , 3 , 4 , 5 буюу 6

init -д заагдсан түвшинд шилжихийг хэлнэ.

a , b , c

initle нь runlevel a , b эсвэл c байгаа / etc / inittab файлын оруулгуудыг зөвхөн процессуудыг ажиллуулахыг хэлнэ.

Q эсвэл q

init гэж хэлэхийн тулд / etc / inittab файлыг дахин шалгана уу.

S буюу с

init гэж ганц хэрэглэгчийн горимд шилжихийг хэлнэ.

U эсвэл u

init- ийг дахин ажиллуулах (state-г хадгалж байх) -г хэлнэ. / Etc / inittab файлыг дахин шалгаж үзэхгүй байна. Run түвшин Ss12345-ийн аль нэг байх ёстой, тэгэхгүй бол хүсэлтийг чимээгүй орхих болно.

telinit нь SIGTERM болон SIGKILL дохионуудыг процессуудыг илгээхэд хэр удаан хүлээх хэрэгтэйг хэлж өгч чадна. Анхдагч утга нь 5 секунд боловч үүнийг -t sec тохируулгаар өөрчилж болно.

telinit нь зөвхөн зөвшөөрөгдсөн эрх бүхий хэрэглэгчээр л хэрэглэгдэж болно.

Init хоёртын файл init буюу telinit эсэхийг өөрийн процессийн ID- ээр шалган шалгадаг; жинхэнэ init -ийн процессийн ID үргэлж 1 байна. Үүнээс үүдэн telinit гэж нэрлэхээсээ түрүүнд товчлуур байдлаар init ашигладаг.