Როგორ გამოვიყენოთ Init ბრძანება Linux- ში

Init არის ყველა პროცესის მშობელი. მისი ძირითადი როლია ფაილების / ფაილების შენახვის პროცესების შექმნა / და / inittab (იხ. Inittab (5)). ეს ფაილი, როგორც წესი, აქვს ჩანაწერები, რომლებიც იწვევენ into to ქვიშის გთხოვს თითოეული ხაზი, რომ მომხმარებლებს შეუძლიათ შესვლა. იგი ასევე აკონტროლებს ავტონომიური პროცესების საჭირო ნებისმიერი კონკრეტული სისტემა.

Runlevels

Runlevel არის პროგრამული უზრუნველყოფის კონფიგურაცია, რომელიც საშუალებას იძლევა მხოლოდ შერჩეული პროცესების ჯგუფი. პროცესები თითოეული ამ ჩამონათვალისთვის init მიერ შეიცავდეს / etc / inittab ფაილი. Init შეიძლება იყოს რვა runlevels: 0-6 და S ან s . სარელეო ცვლილება შეიცვალა პრივილეგირებული მომხმარებლის ტელინით , რომელიც აგზავნის შესაბამის სიგნალებს init- ს , ეუბნება, რომელიც აწარმოებს ცვლილებებს.

გაშვებებით 0 , 1 და 6 დაცულია. Runlevel 0 გამოიყენება სისტემის შეჩერებისთვის, სარელეო 6 გამოიყენება სისტემის გადატვირთვისთვის და სარელეო 1 გამოიყენება სისტემაში ერთი მომხმარებლის რეჟიმში. Runlevel S არ ნიშნავს იმას, რომ პირდაპირ უნდა იქნას გამოყენებული, მაგრამ უფრო მეტი სკრიპტები, რომლებიც შესრულებულია სარელეო შესვლისას. დამატებითი ინფორმაციისთვის იხილეთ გამშვები პუნქტები (8) და inittab (5).

მართალია, გაშვების 7-9 ასევე მოქმედებს, თუმცა ნამდვილად არ არის დოკუმენტირებული. ეს იმიტომ, რომ "ტრადიციული" Unix ვარიანტი არ გამოიყენებს მათ. იმ შემთხვევაში, თუ თქვენ ხართ საინტერესო, runlevels S და s ფაქტობრივად იგივე. ისინი იგულისხმება იმავე პერსპექტივაში.

ჩატვირთვა

მას შემდეგ, რაც init ინიშნება როგორც ბოლო ნაბიჯი კერნელი boot sequence, იგი ეძებს ფაილი / etc / inittab სანახავად თუ არსებობს შესვლის ტიპის initdefault (იხ. Inittab (5)). Initdefault შესვლის განსაზღვრავს საწყისი runlevel სისტემის. თუ ასეთი ჩანაწერი არ არის (ან / etc / inittab საერთოდ არ არის), სარელეო სისტემა უნდა ჩაიწეროს სისტემურ კონსოლში.

Runlevel S ან s მოყვება სისტემა ერთი მომხმარებლის რეჟიმში და არ საჭიროებს / etc / inittab ფაილი. ერთი მომხმარებლის რეჟიმში, root ჭურვი გაიხსნა / dev / console .

ერთი მომხმარებლის რეჟიმში შესვლისას, init კითხულობს კონსოლის ioctl (2) ქვეყნების /etc/ioctl.save . თუ ეს ფაილი არ არსებობს, init ინიციალიზება ხაზი 9600 baud და CLOCAL პარამეტრები. როდესაც init დატოვებს ერთი მომხმარებლის რეჟიმი, ის ინახავს კონსოლის ioctl პარამეტრების ამ ფაილი, ასე რომ მას შეუძლია ხელახლა გამოიყენოს ისინი მომდევნო ერთი მომხმარებლის სესია.

პირველად მულტი-მომხმარებლის რეჟიმში შესვლისას, init ასრულებს boot და bootwait- ის ჩანაწერებს, რათა ფაილური სისტემა დამონტაჟდეს, სანამ მომხმარებლებს შეუძლიათ შეხვიდეთ სისტემაში.

ახალი პროცესის დაწყებისას, init პირველი ამოწმებს თუ არა ფაილი / etc / initscript არსებობს. თუ ეს ასეა, იგი იყენებს ამ სცენარს პროცესის დასაწყებად.

ყოველ ჯერზე ბავშვი წყვეტს, ფაქტობრივად შეაქვს ფაქტი და ამის მიზეზი გარდაიცვალა / var / run / utmp და / var / log / wtmp- ში , იმ პირობით, რომ ეს ფაილი არსებობს.

შეცვლის Runlevels

მას შემდეგ, რაც იგი შეიცავდა ყველა პროცესს, init ელოდება ერთი მისი შთამომავალი პროცესების სიკვდილი, powerfail სიგნალი, ან სანამ იგი სიგნალი მიერ telinit შეცვალოს სისტემის runlevel. როდესაც ზემოთ ჩამოთვლილი სამი პირობა ხდება, ხელახლა იკვლევს / etc / inittab ფაილი. ახალი ჩანაწერი შეიძლება დაემატოს ამ ფაილს ნებისმიერ დროს. თუმცა, ისიც კვლავაც ელოდება ერთ-ერთ ზემოთ ჩამოთვლილ პირობებს. უზრუნველყოს მყისიერი პასუხი, telinit Q ან q ბრძანება შეიძლება გაიღვიძოს init ხელახლა შეისწავლოს / etc / inittab ფაილი.

თუ init არ არის ერთი მომხმარებლის რეჟიმში და იღებს powerfail სიგნალს (SIGPWR), იგი ნათქვამია ფაილი / etc / powerstatus . მას შემდეგ იწყებს ბრძანებას ამ ფაილის შინაარსზე:

F (AIL)

ძალა არ არის, UPS უზრუნველყოფს ძალას. შეასრულოს powerwait და powerfail ჩანაწერები.

კარგი)

ძალა აღდგა, შეასრულოს powerokwait მასალა.

ლ (OW)

ძალა ვერ და UPS აქვს დაბალი ბატარეა. შეასრულოს powerfailnow მასალა.

თუ / etc / powerstatus არ არსებობს ან შეიცავს სხვა რამ, მაშინ ასო F , O ან L , init მოიქცევა ისე, თითქოს იგი წაიკითხავს წერილს F.

SIGPWR და / etc / powerstatus- ის გამოყენება მორალურად არის მოტივირებული. ვინმეს სურს ინტერაქტიულ init გამოიყენოს / dev / initctl კონტროლის არხი - იხილეთ წყარო კოდი sysvinit პაკეტი მეტი დოკუმენტაცია ამის შესახებ.

როდესაც init ითხოვს შეცვლის runlevel, იგი აგზავნის გამაფრთხილებელი სიგნალი SIGTERM ყველა პროცესები, რომლებიც undefined ახალ runlevel. მას შემდეგ ელოდება 5 წამს, სანამ ამ პროცესების ძალის გამოყენებით შეწყვეტას SIGKILL სიგნალის მეშვეობით. გაითვალისწინეთ, რომ ყველა ეს პროცესი (და მათი შთამომავლები) რჩება იმავე პროცესში, რომელიც თავდაპირველად მათთვის შექმნილია. თუ პროცესი ცვლის მისი პროცესის ჯგუფურ კუთვნილებას, ეს არ მიიღებს ამ სიგნალებს. ასეთი პროცესები ცალკე უნდა შეწყდეს.

თელინიტი

/ sbin / telinit უკავშირდება / sbin / init . იგი იღებს ერთ ხასიათს არგუმენტს და სიგნალებს init ასრულებს შესაბამისი ქმედება. შემდეგი არგუმენტები ემსახურება როგორც დირექტივებს telinit :

0 , 1 , 2 , 3 , 4 , 5 ან 6

ვუთხრა init გადაადგილება მითითებულ პერსპექტივაში.

, ,

ვუთხრა init დამუშავებას მხოლოდ იმ / etc / inittab ფაილის ჩანაწერების მქონე runlevel, b ან c .

Q ან q

ვუთხრა init- ს ხელახლა შეისწავლოს / etc / inittab ფაილი.

S ან s

ვუთხრა init გადართოთ ერთი მომხმარებლის რეჟიმში.

U ან u

ვუთხრა init- ს ხელახლა შესრულება (დაცვა სახელმწიფო). არ ხელახლა შემოწმება / etc / inittab ფაილი ხდება. გაშვების დონე უნდა იყოს ერთი Ss12345 , წინააღმდეგ შემთხვევაში, თხოვნა მდუმარად იგნორირებული იქნება.

telinit- ს ასევე შეუძლია იცოდეს init რამდენი ხანი უნდა დაველოდოთ SIGTERM და SIGKILL სიგნალების გაგზავნის პროცესებს შორის. Default არის 5 წამი, მაგრამ ეს შეიძლება შეიცვალოს -t წამში ვარიანტი.

telinit შეიძლება მოიწვიოს მხოლოდ მომხმარებლებს შესაბამისი პრივილეგიები.

Init ორობითი ამოწმებს თუ ის init ან telinit მიერ ეძებს მისი პროცესის id ; რეალური init პროცესის id ყოველთვის 1 . აქედან გამომდინარეობს, რომ telinit- ს ნაცვლად შეგიძლიათ გამოიყენოთ init- ის ნაცვლად კომბინაცია.