Linux ကိုအတွက် init စစ်ဌာနချုပ်အသုံးပြုနည်းကိုဘယ်လို

init လုပ်ငန်းစဉ်များအားလုံးမိဘဖြစ်ပါတယ်။ ၎င်း၏အဓိကအခန်းကဏ္ဍဖိုင်ကို / etc / inittab ((5) inittab ကိုကြည့်ပါ) ထဲမှာသိမ်းထားတဲ့ဇာတ်ညွှန်းထဲကနေဖြစ်စဉ်များဖန်တီးရန်ဖြစ်ပါသည်။ ဤဖိုင်များသောအားဖြင့် init အသုံးပြုသူများကိုဝငျရောကျနိုငျသောအသီးအသီးလိုင်းပေါ် Getty s ကို spawn စေရာ entries တွေကိုရှိပါတယ်။ ဒါဟာအစမဆိုအထူးသဖြင့်စနစ်ဖြင့်လိုအပ်သောကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရလုပ်ငန်းစဉ်များကိုထိန်းချုပ်ထား။

Runlevels

တစ်ဦးက runlevel ဖြစ်စဉ်များသာရွေးချယ်ထားသည့်အဖွဲ့တစ်ဖွဲ့တည်ရှိခွင့်ပြုထားတဲ့စနစ်၏ software ကို configuration များဖြစ်ပါတယ်။ ဤအ runlevels ၏အသီးအသီးအဘို့အ init အားဖြင့်မွေးထုတ်အဆိုပါဖြစ်စဉ်များ / etc / inittab ဖိုင်ထဲမှာသတ်မှတ်ကြပါတယ်။ 0-6 နဲ့ S သို့မဟုတ် s ကို: init ရှစ် runlevels ၏တဦးတည်းအတွက်ဖြစ်နိုင်ပါတယ်။ အဆိုပါ runlevel မှပြောင်းလဲပစ်ရန် runlevel ရသောကြောင့်ပြောနေ, init ဖို့သင့်လျော်တဲ့အချက်ပြပို့ပေးတဲ့အခွင့်ထူးခံအသုံးပြုသူပြေး telinit, ရှိခြင်းအားဖြင့်ပြောင်းလဲသွားသည်။

Runlevels 0, 1, 6 reserved နေကြသည်။ Runlevel 0 င်စနစ်ရပ်တန့်ရန်အသုံးပြုသည် runlevel 6 စနစ် reboot အသုံးပြုသည်နှင့် runlevel 1 ချတစ်ခုတည်းအသုံးပြုသူ mode သို့စနစ်ရရှိရန်အသုံးပြုသည်။ Runlevel S ဟာ shutdown ချဘို့ manpages (8) နှင့် inittab (5) ကိုကြည့်ပါ, ဒီအပေါ်ပိုမိုသိရှိလိုပါက runlevel 1. ဝင်သောအခါအကွပ်မျက်ခံရသော script များအဘို့တကယ်တိုက်ရိုက်အသုံးပြုနိုင်ဖို့ရည်ရွယ်ပေမယ့်မပိုဖြစ်ပါတယ်။

တကယ်မှတ်တမ်းတင်မဟုတ်သော်လည်း 7-9 ကိုလည်းခိုင်လုံသောများမှာ Runlevels ။ "ရိုးရာ" Unix မျိုးကွဲသူတို့ကိုမသုံးကြဘူးဘာဖြစ်လို့လဲဆိုတော့ဒါကဖြစ်ပါတယ်။ သငျသညျစပ်စုနေကိစ္စတွင်ခုနှစ်, runlevels S နှင့် s ကိုတကယ်တော့အတူတူပါပဲ။ ပြည်တွင်းရွှေ့ပြောင်းသူတို့အတူတူ runlevel များအတွက်နာမည်တုများဖြစ်ကြသည်။

Booting

init သည့် kernel ကို Boot တက် sequence ကို၏နောက်ဆုံးခြေလှမ်းအဖြစ်မဖြစ်၏ပြီးနောက်ကအမျိုးအစား initdefault တစ်ခု entry ကို ((5) inittab ကိုကြည့်ပါ) ရှိလျှင်ကြည့်ဖို့ဖိုင်ကို / etc / inittab များအတွက်ကြည့်ရှုသည်။ အဆိုပါ initdefault entry ကိုအဆိုပါစနစ်၏ကနဦး runlevel ဆုံးဖြတ်သည်။ အဘယ်သူမျှမထိုကဲ့သို့သော entry ကို (သို့မဟုတ်အားလုံးမှာအဘယ်သူမျှမ / etc / inittab) လည်းမရှိဆိုပါကတစ်ဦး runlevel စနစ် console ကိုမှာထဲသို့ဝင်ရပါမည်။

Runlevel S ကိုသို့မဟုတ်ကိုယ့်တစ်ခုတည်းအသုံးပြုသူ mode ကိုမှစနစ်ဆောင်ကြဉ်းကာ / etc / inittab file ကိုမလိုအပ်ပါဘူး။ တစ်ခုတည်းအသုံးပြုသူ mode မှာတစ်အမြစ် shell ကို dev / console ကို / ရက်နေ့တွင်ဖွင့်လှစ်ခဲ့သည်။

တစ်ခုတည်းအသုံးပြုသူ mode ကိုဝင်သောအခါ, init console ကိုဖွင့်ဖတ် ioctl (2) /etc/ioctl.save ထံမှဖော်ပြသည်။ ဒီ file ကိုမတည်ရှိပါဘူးဆိုရင်, init 9600 baud မှာ CLOCAL setting များကိုအတူလိုင်း initializes ။ init တစ်ခုတည်းအသုံးပြုသူ mode ကိုအရွက်သည့်အခါကလာမယ့် Single-အသုံးပြုသူ session များအတွက်သူတို့ကို re-အသုံးပွုနိုငျဒါကြောင့်ဒီဖိုင်ထဲမှာ console ကိုဖွင့် ioctl setting များကိုသိုလှောင်ပါသည်။

ပထမဦးဆုံးအကြိမ်များအတွက် Multi-user mode ကိုဝင်သောအခါ, init ထိုအခါ runlevel ကိုက်ညီအားလုံးသော posts လုပ်ငန်းများ၌နေကြသည်။ အသုံးပြုသူများကဝငျရောကျနိုငျသညျရှေ့တျော၌ဖိုင်စနစ်များတပ်ဆင်ထားခြင်းကိုခွင့်ပြုပါရန် Boot တက်နှင့် bootwait entries တွေကိုလုပ်ဆောင်တယ်။

ဖြစ်စဉ်သစ်တခုစတင်ဖိုင်ကို / etc / initscripts တည်ရှိခြင်းရှိမရှိ init ပထမဦးဆုံးစစ်ဆေးမှုများအခါ။ ဒါကြောင့်မပါကလုပ်ငန်းစဉ်စတင်ရန်ဒီ script ကိုအသုံးပြုသည်။

ကလေးတစ်ဦးအဆုံးသတ်တစ်ခုချင်းစီကိုအချိန်, init ဆိုတဲ့အချက်ကိုကြောင့်ဤဖိုင်များကိုတည်ရှိကြောင်းပေး, / var / run / utmp နှင့် / var / log / wtmp သေဆုံးသည့်အကြောင်းရင်းမှတ်တမ်းတင်ထားသည်။

ပြောင်းခြင်း Runlevels

ဒါဟာသတ်မှတ်ထားတဲ့လုပ်ငန်းစဉ်များအပေါငျးတို့သမွေးထုတ်ထားပါတယ်ပြီးနောက် init သေဖို့က၎င်း၏ဆင်းသက်လာဖြစ်စဉ်များများထဲမှတစ်ဦး powerfail signal ကိုစောင့်, သို့မဟုတ်ပါကစနစ်ရဲ့ runlevel ပြောင်းလဲပစ်ရန် telinit အားဖြင့်အချက်ပြနေသည်အထိပါပဲ။ အထက်ပါသုံးအခြေအနေများများထဲမှဖြစ်ပေါ်သည့်အခါက / etc / inittab file ကို re-examine လုပ်တယ်။ နယူး entries တွေကိုဘယ်အချိန်မဆိုမှာဒီဖိုင်ကဆက်ပြောသည်နိုင်ပါသည်။ သို့သော် init နေဆဲပေါ်ပေါက်ဖို့အထက်သုံးအခြေအနေများ၏တဦးတည်းအဘို့စောင့်ဆိုင်းရပါတယ်။ တစ်ချက်ချင်းတုန့်ပြန်ဘို့ပေးဖို့, telinit မေးသို့မဟုတ်က q command ကို re-ဆန်းစစ် / etc / inittab ဖိုင် init နှိုးနိုင်ပါတယ်။

init တစ်ခုတည်းအသုံးပြုသူ mode မှာမဟုတျပါဘူးနှင့် powerfail signal ကို (SIGPWR) အားလက်ခံတွေ့ဆုံပါကဖိုင်ကို / etc / powerstatus ဖတ်တယ်။ ဒါဟာဖြစ်လျှင်ဤဖိုင်ရဲ့ contents အပေါ်အခြေခံပြီး command တစ်ခုစတင်သည်:

F ကို (AIL)

Power ကပျက်ကွက်သည် UPS ပါဝါပေးနေပါသည်။ အဆိုပါ powerwait နှင့် powerfail entries တွေကို execute ။

ရလား)

အဆိုပါအာဏာ powerokwait entries တွေကို execute, ပွနျလညျထူထောငျခဲ့သညျ။

L ကို (OW)

ပါဝါပျက်ကွက်နေသည်နှင့် UPS နိမ့်ဘက်ထရီရှိပါတယ်။ အဆိုပါ powerfailnow entries တွေကို execute ။

/ etc / powerstatus ထို့နောက်အက္ခရာများက F, အိုသို့မဟုတ် L ကိုမတည်ရှိသို့မဟုတ်အရာအားလုံးထက်ပါရှိသည်မပါဘူးဆိုရင်ဒါဟာအက္ခရာ F ကိုဖတ်ပြီးပြီဆိုပါကအဖြစ်, init ငျြ့ပါမညျ။

SIGPWR ၏အသုံးပြုမှုနှင့် / etc / powerstatus စိတ်ဓာတ်ဖြစ်ပါတယ်။ init နှင့်အတူအပြန်အလှန်လိုသောတစ်စုံတစ်ဦးကအဆိုပါ / dev / initctl ထိန်းချုပ်မှုရုပ်သံလိုင်းကိုအသုံးပြုသင့်ပါတယ် - ဒီအကြောင်းပိုမိုစာရွက်စာတမ်းများများအတွက် sysvinit အထုပ်၏ source code ကိုကြည့်ပါ။

init အဆိုပါ runlevel ပြောင်းလဲပစ်ရန်မေတ္တာရပ်ခံသောအခါ, ကသစ်ကို runlevel အတွက် undefined သမျှသောဖြစ်စဉ်များမှသတိပေးအချက်ပြ SIGTERM ပေးပို့သည်။ ထို့နောက်အတင်းအကြပ်အဆိုပါ SIGKILL signal ကိုမှတဆင့်သည်ဤဖြစ်စဉ်များရပ်စဲမီ 5 စက္ကန့်စောင့်ဆိုင်းရပါတယ်။ init သမျှသောဤလုပ်ငန်းစဉ်များ (နှင့်သူတို့၏သားစဉ်မြေးဆက်) မူလကထိုသူတို့အဘို့ဖန်တီး init သောတူညီသည့်လုပ်ငန်းစဉ်အုပ်စုတွင်ကျန်ကြွင်းသောယူဆသတိပြုပါ။ မည်သည့်လုပ်ငန်းစဉ်သည်၎င်း၏လုပ်ငန်းစဉ်ကိုအုပ်စုတစ်စုဆက်နွယ်မှုပြောင်းလဲလိုလျှင်ဤအချက်ပြလက်ခံရရှိလိမ့်မည်မဟုတ်ပါ။ ထိုသို့သောဖြစ်စဉ်များသီးခြားစီရပ်စဲထားရန်လိုအပ်ပါသည်။

Telinit

/ sbin / telinit မှ / sbin / init နှင့်ဆက်စပ်နေသည်။ ဒါဟာတစ်ဇာတ်ကောင်အငြင်းအခုံကြာနှင့်အချက်ပြသင့်လျော်သောအရေးယူဆောင်ရွက်မှုဖျော်ဖြေဖို့ init ။ အောက်ပါအငြင်းပွားမှုများ telinit မှညွှန်ကြားချက်အဖြစ်ဆောင်ရွက်:

0 င်, 1, 2, 3, 4, 5 သို့မဟုတ် 6

သတ်မှတ်ထားသောပြေးအဆင့်အထိပြောင်းလဲ init ပြောပြပါ။

a, b, c ကို

runlevel တစ်ဦး, ခသို့မဟုတ်က c ရှိခြင်းသူတို့သာ / etc / inittab ဖိုင် entries တွေကိုလုပ်ဆောင်ပေးရန် init ပြောပြပါ။

မေးသို့မဟုတ်က q

re-ဆန်းစစ် / etc / inittab ဖိုင် init ပြောပြပါ။

S ကသို့မဟုတ် s ကို

တစ်ခုတည်းအသုံးပြုသူ mode ကိုပြောင်း init ပြောပြပါ။

ဦးသို့မဟုတ်ဦး

(ပြည်နယ်ထိန်းသိမ်း) re-execute ကိုယ်တိုင်ကမှ init ပြောပြပါ။ အဘယ်သူမျှမ / etc ပြန်လည်ဆန်းစစ် / inittab file ကိုတွေ့ကြုံတတ်၏။ Run ကိုအဆငျ့မဟုတ်ရင်တောင်းဆိုမှုကိုတိတ်တဆိတ်လျစ်လျူရှုမည်ဖြစ်ကြောင်း Ss12345 တဖြစ်သင့်သည်။

telinit ကိုလည်းလုပ်ငန်းစဉ်များအတွက် SIGTERM နှင့် SIGKILL အချက်ပြမှုများပို့ခြင်းအကြားစောင့်ဆိုင်းသင့်ပါတယ်အဘယ်မျှကာလပတ်လုံး init ပြောပြနိုင်ပါတယ်။ ကို default 5 စက္ကန့်ဖြစ်ပါတယ်, ဒါပေမယ့်ဒီ -t စက္က option နဲ့အတူပြောင်းလဲသွားနိုင်ပါတယ်။

telinit သာသင့်လျော်သောအခွင့်ထူးနှင့်အတူအသုံးပြုသူများအနေဖြင့်မဖြစ်၏နိုင်ပါသည်။

အဆိုပါ init binary စစ်ဆေးမှုများပြုလုပ်င်း၏ဖြစ်စဉ်ကိုအိုင်ဒီကိုကြည့်ခြင်းဖြင့် init သို့မဟုတ် telinit ဖြစ်ပါတယ်လျှင်, အစစ်အမှန် init 's ဖြစ်စဉ်ကိုအိုင်ဒီအမြဲ 1 ဖြစ်ပါတယ်။ ဒီကနေမယ့်အစား telinit တောင်းဆိုတစ်ဦးလည်းပဲဖြတ်လမ်းအဖြစ်အစား init အသုံးပွုနိုငျကွောငျးကိုအောက်ပါအတိုင်း။