نحوه استفاده از فرمان Init در لینوکس

Init پدر و مادر از تمام فرایندها است. نقش اصلی آن ایجاد فرآیندهای از یک اسکریپت ذخیره شده در فایل / etc / inittab است (see inittab (5)). این پرونده معمولا دارای مقادیری است که باعث می شود init برای ایجاد هرتی در هر خطی که کاربران می توانند وارد سیستم شوند. همچنین کنترل فرآیندهای مستقل مورد نیاز سیستم خاص را کنترل می کند.

Runlevels

سطح اجرا یک پیکربندی نرم افزاری است که اجازه می دهد تا فقط یک گروه انتخاب شده از فرآیند وجود داشته باشد. فرآیندهای ایجاد شده توسط init برای هر یک از این سطوح اجرا در فایل / etc / inittab تعریف شده است. Init می تواند در یکی از هشت سطح اجرا باشد: 0-6 و S یا S. سطح کار با استفاده از کاربر privileged اجرا telinit تغییر می کند ، که سیگنال های مناسب را برای init ارسال می کند و به آن می گویند که سطح اجرا باید تغییر کند.

سطوح صفر ، 1 و 6 ذخیره می شوند. Runlevel 0 برای متوقف کردن سیستم استفاده می شود، سطح کار 6 برای راه اندازی مجدد سیستم استفاده می شود و سطح کار 1 برای بدست آوردن سیستم به حالت یک کاربر استفاده می شود. Runlevel S واقعا به معنای استفاده مستقیم نیست، اما بیشتر برای اسکریپت هایی که هنگام ورود به سطح سطر 1 اجرا می شوند. برای اطلاعات بیشتر در این مورد، صفحه های خاموش کردن (8) و inittab (5) را ببینید.

Runlevels 7-9 نیز معتبر هستند، اما واقعا مستند نیستند. این به این دلیل است که "سنتی" یونیکس از آنها استفاده نمی کنند. در صورتی که شما کنجکاو باشید، سطح کار S و S در واقع یکسان هستند. در داخل آنها، نام مستعار برای همان سطوح در حال اجرا است.

بوت شدن

پس از init به عنوان آخرین مرحله از دنباله بوت هسته، به دنبال فایل / etc / inittab میگردد تا ببینید آیا ورودی نوع initdefault وجود دارد (see inittab (5)). ورودی initdefault تعیین سطح اولیه سطح سیستم است. اگر چنین ورودی وجود ندارد (و یا هیچ / etc / inittab در همه)، سطح کار باید در کنسول سیستم وارد شود.

Runlevel S یا S این سیستم را به حالت تک کاربر منتقل می کند و نیازی به فایل / etc / inittab نیست . در حالت تک کاربر پوسته ریشه در / dev / console باز می شود .

هنگام ورود به حالت تک کاربر، init خواندن کنسول Ioctl (2) از /etc/ioctl.save را می نویسد . اگر این پرونده وجود نداشته باشد، init خط را 9600 باند و با تنظیمات CLOCAL را اولویت بندی می کند. هنگامی که init یک حالت کاربری کاربر را می دهد، تنظیمات کنسول ioctl را در این فایل ذخیره می کند تا بتواند از آنها برای یک جلسه تک کاربره استفاده کند.

هنگام ورود به یک کاربر چند کاربره برای اولین بار، init فایل های بوت و bootwait را اجرا می کند تا سیستم های فایل را قبل از اینکه بتوانند وارد سیستم شوند، نصب می کنند. سپس تمام ورودی های مطابق با سطوح کار پردازش می شوند.

هنگام شروع یک فرآیند جدید، init ابتدا چک کنید که آیا فایل / etc / initscript وجود دارد. اگر این کار را می کند، از این اسکریپت برای شروع روند استفاده می کند.

هربار که یک فرزند متوقف می شود، init فاکتور و دلیل آن را در / var / run / utmp و / var / log / wtmp می گذراند ، در صورتی که این فایل ها وجود داشته باشند.

تغییر سطوح اجرا

پس از آن همه فرآیندهای مشخص شده ایجاد شده است، init برای یکی از فرایندهای نسل بعد منتظر می ماند، یک سیگنال قدرتمند فایل، یا تا زمانی که توسط telinit برای تغییر سطح عملکرد سیستم نشان داده شود. هنگامی که یکی از سه شرایط فوق رخ می دهد، فایل / etc / inittab دوباره بررسی می شود. ورودی های جدید می تواند در هر زمان به این فایل اضافه شود. با این حال، init هنوز منتظر یکی از سه شرایط فوق می باشد. برای ارائه یک پاسخ بلافاصله، دستور telinit Q یا q میتواند init را برای بازبینی فایل / etc / inittab بیدار کند.

اگر init در حالت تک کاربر نیست و یک سیگنال قدرت فایل دریافت می کند (SIGPWR)، فایل / etc / powerstatus را می خواند. سپس یک فرمان بر اساس محتویات این فایل شروع می شود:

شکست)

قدرت فاجعه است، UPS قدرت را فراهم می کند. فایل های powerwait و powerfail را اجرا کنید.

خوب)

قدرت بازگردانده شده است، نوشته های قدرتمندی را اجرا می کند.

کم)

قدرت خراب است و UPS دارای باتری کم است. ورودی های powerfailnow را اجرا کنید.

اگر / etc / powerstatus وجود نداشته باشد یا حاوی چیز دیگری باشد، سپس حروف F ، O و L ، init رفتار خواهد کرد مثل نامه ای که F را خوانده است.

استفاده از SIGPWR و / etc / powerstatus نادیده گرفته می شود. کسی که میخواهد با init ارتباط برقرار کند باید از کانال کنترل / dev / initctl استفاده کند - کد منبع بسته sysvinit برای اسناد بیشتر در مورد این را ببینید.

هنگامی که init درخواست تغییر سطح کار را می دهد، سیگنال هشدار دهنده SIGTERM را به تمام فرایندهایی که در سطح سطحی جدید تعریف نشده است، ارسال می کند. سپس 5 ثانیه پس از اعمال زور از طریق سیگنال SIGKILL به پایان می رسد. توجه داشته باشید که init فرض می کند که تمام این فرآیندها (و فرزندان آنها) در یک گروه فرایند که در ابتدا برای آنها ایجاد شده است، باقی می مانند. اگر هر فرایند وابستگی گروه فرآیند را تغییر دهد، این سیگنال ها را دریافت نمی کند. چنین فرایندهایی باید جداگانه خاتمه یابد.

Telinit

/ sbin / telinit به / sbin / init مرتبط است . این یک آرگومان یک کاراکتری است و سیگنال های init را برای انجام اقدام مناسب می گیرد. استدلال زیر به عنوان دستورالعمل برای telinit عمل می کند :

0 ، 1 ، 2 ، 3 ، 4 ، 5 یا 6

به init وارد شوید تا به سطح اجرای مشخص شده تغییر کند.

a ، b ، c

به init برای پردازش تنها آن entries / etc / inittab که دارای سطح اجرا a ، b یا c هستند را پردازش کنید.

Q یا q

برای init دوباره فایل / etc / inittab را بررسی کنید.

S یا S

برای ورود به حالت تک کاربر به init بگویید.

U یا تو

به init خود بگو تا خود را مجددا اجرا كنید (حفظ حكومت). بررسی مجدد فایل / etc / inittab وجود ندارد . سطح اجرای باید یکی از Ss12345 باشد ، در غیر این صورت درخواست به طور صریح نادیده گرفته می شود.

telinit همچنین می تواند در چه زمانی باید بین فرآیند ارسال سیگنال SIGTERM و SIGKILL صبر کند. پیش فرض 5 ثانیه است، اما این می تواند با گزینه -t sec تغییر کند.

telinit می تواند فقط توسط کاربران با امتیازات مناسب مورد استفاده قرار گیرد.

بررسی باینری init در صورتی که init یا telinit با نگاه کردن به شناسه فرایند آن باشد ؛ شناسه روند واقعی init همیشه 1 است . از این به این می شود که به جای تماس با telinit، می توان از init نیز به عنوان یک میانبر استفاده کرد.