Thursday, December 12, 2019

Using background, foreground and nohup

                  အခု article မှာတော့ Linux process တေွကို background မှာ ဘယ်လို run မလဲ​ foreground ကို ဘယ်လိုပြန်ထုတ်မလဲ နောက်ပြီးတော့ "nohup" ကိုဘယ်လိုနေရာတေွမှာအသုံးပြုနိုင်လဲ ဆိုတာကိုပြောပြသွားမှာဖြစ်ပါတယ်။

Foreground and Background Process
                  Foreground process ဆိုတာက လက်ရှိ terminal ပေါ်မှာ process တစ်ခုကို run လိုက်လို့ မြင်နေရတယ် အဲ့ဒီ terminal ပေါ်မှာ ပြပေးနေတဲ့ process တေွအပြင် ထပ်ပြီးတော့ တစ်ခြား process တေွ run ချင်တယ် တစ်ခြားလုပ်စရာတေွရှိတယ် foreground မှာ run နေတဲ့ process တစ်ခုထဲကိုပဲပြီးတဲ့အထိ စောင့်မနေချင်ဘူးဆိုရင်တော့ အဲ့ process တေွကို background ကိုပို့လိုက်လို့ရပါတယ်။



Using "&" , "bg", "fg", "jobs"
                 အိုကေ ဒါဆို ကွျန်တော်တို့ ဒီ foreground, background တေွကို ဘယ် command တေွနဲ့အသုံးပြုလဲ လေ့လာကြည့်ရအောင်။

"&"
              ဒီ "&" ampersand sign ကိုတော့ ကိုယ်က process တစ်ခုကို စ run ကထဲက background မှာပဲ run စေချင်တယ်ဆိုရင် အသုံးပြုပါတယ်။ ဥပမာ အောက်ပုံမှာ #wget နဲ့ CentOS ISO ကို download ဆွဲနေတယ် အဲ့ဒီ process ကို foreground မှာ တင်မထားချင်ဘူး စ run ကထဲ က background မှာပဲ run ချင်တယ်ဆိုရင် အခုလိုမျိုး အသုံးပြုလို့ရပါတယ်။



"bg" ,"fg" and "jobs"
               #bg ဆိုတဲ့ command က လက်ရှိ background မှာ process တေွ ဘယ်နှစ်ခု run နေလဲ သိချင်ရင်အသုံးပြုပါတယ်။ #jobs command ကတော့ background မှာ run နေတဲ့ process name အပြင် process id ကိုပါ ပြပေးပါတယ်။ ပြသပေးတဲ့နေရာမှာ process id [1] [2] နှင့်အတူ "+" sign နဲ့ပြနေတဲ့ process သည် နောက်ဆုံး run ထားတဲ့ process ကိုပြတာဖြစ်ပြီး "-" sign ကတော့ နောက်ဆုံး run ထားတဲ့ process မတိုင်ခင် run ထားတဲ့ process ကိုပြပေးတာဖြစ်ပါတယ်။
              #fg command ကိုတော့ လက်ရှိ background မှာ run နေတဲ့ process တေွကို foreground ကိုပြန်ပို့ချင်တယ်ဆိုရင်အသုံးပြုပါတယ်။  ဒီအတိုင်း #fg ဆိုပြီး ရိုက်ရင်တော့ နောက်ဆုံး run ထားတဲ့ process "+" ကို foreground သို့ပြန်ထုတ်ပေးမှာဖြစ်ပါတယ်။ Background မှာ run နေတဲ့ process တေွက တစ်ခုထက်ပိုခဲ့ရင် process id ဖြင့် #fg  ဆိုပြီး foreground ကိုပြန်ထုတ်နိုင်ပါတယ်။  အောက်ပုံမှာ အပေါ်မှာ ရှင်းပြထားတဲ့ commands တေွကိုအသုံးပြုပြီး #sleep process ကို background ကိုဘယ်လိုပို့လဲ background process id and list တေွကို ဘယ်လိုကြည့်ရမလဲ foreground ကိုဘယ်လိုပြန်ထုတ်မလဲပြထားပါတယ်။ Background process တေွကို terminate လုပ်ချင်ရင်တော့ #kill command ဖြင့် process id ကို terminate လုပ်နိုင်ပါတယ်။




"Ctrl-Z"
               "Ctrl-Z" ကိုတော့ process တစ်ခုကို foreground ပေါ်မှာ run လိုက်ပြီ ဒါပေမယ့် အဲ့ process ကို background ကို ပို့ချင်တယ်ဆိုရင်အသုံးပြုပါတယ်။ ဒါပေမယ့် process က background ရောက်သွားပေမယ့် run မနေပဲ "stopped" ဖြစ်သွားပါတယ်။ အဲ့ဒါကိုမှ background မှာ run ချင်တယ်ဆိုရင် #bg ဆိုပြီး ပြန်ရိုက်ပေးမှ background မှာ running ပြန်ဖြစ်သွားတာဖြစ်ပါတယ်။ အောက်ပုံမှာ #wget command ဖြင့် ရှင်းပြထားပါတယ်။


"nohup" (No Hangup)
               နောက်ဆုံး command တစ်ခုကတော့ "nohup" အကြောင်းကိုပြောချင်ပါတယ်။ "nohup" သည်လည်းပဲ process ကို background မှာ run ခိုင်းလို့ရတဲ့ command တစ်ခုဖြစ်ပါတယ်။ "nohup" command ကိုအသုံးပြုတဲ့အခါ "&" sign နဲ့တွဲသုံးရပါတယ်။ ဒါပေမယ့် တစ်ခုပိုသွားတာက ကွျန်တော်တို့ server မှာ ဥပမာအနေနဲ့ လုပ်စရာလုပ်ပြီးလို့ ssh session disconnect ဖြစ်သွားရင်တောင် "nohup" နှင့် process ကို run ထားရင် process stopped ဖြစ်မသွားပဲ ဆက်လက် process လုပ်ငန်းပြီးတဲ့အထိ လုပ်ဆောင်သွားမှာဖြစ်ပါတယ်။ ဥပမာအနေနဲ့ ကွျန်တော်တို့အခု ISO download ဆွဲနေတယ် ဒီ process က ကျွန်တော်တို့ session disconnected ဖြစ်သွားရင် download ဆွဲနေတဲ့ process ပါ ရပ်သွားမှာဖြစ်ပါတယ် အဲ့တော့ မရပ်စေချင်ဘူး session out ဖြစ်သွားလဲ​ဆက် run စေချင်တယ်ဆိုရင် #nohup command ကိုအသုံးပြုနိုင်ပါတယ်။ #nohup command အလုပ်လုပ်ပုံက process ကို "nohup.out" file ဆီ redirect ပို့ပြီး run တာဖြစ်ပါတယ်။ #tail command ဖြင့် "nohup.out" file ကို ကြည့်ပြီး process progress ကို ကြည့်နိုင်တယ် နောက်ပြီး process ကို terminate လုပ်ချင်ရင်တော့ #kill နဲ့ပဲ terminate လုပ်နိုင်ပါတယ်။ 





That's it. Thanks and Enjoy Reading!!! :) 
Follow and Like the Root OF Info Page.



Share:

0 comments:

Post a Comment