Sar Yay Club

Do it first. You can do it right later.

13 Jun 2020

htop Explain - process

Process monitoring လုပ်တဲ့ tool တခုဖြစ်တဲ့ htop ဘယ်လိုအလုပ်လဲ ဘယ်ကနေ data တွေ ယူလဲဆိုတဲ့ series ရဲ့ ဒုတိယမြောက် post ဖြစ်ပါတယ်။ ပထမအပိုင်း htop Explain - uptime ကို ဒီမှာ ဖတ်နိုင်ပါတယ်။

terminal မှာ htop ကို ဖွင့်ကြည့်လိုက်နဲ့ အခုလက်ရှိ run နေတဲ့ process တွေကိုလည်း မြင်ရမှာပါ။

htop processes

အပေါ်က ပုံထဲမှာ အခုလောလောဆယ် process ၇၄ ခု ရှိနေပါတယ်။ process တွေကို task လို့လည်း ခေါ်ပါတယ်။ htop ကတော့ process အစား task လို့ သုံးပါတယ်။

ကိုယ်က htop လို့ ရိုက်ကြည့်လိုက်လို့ process တွေအကုန်မမြင်ရဘူးဆိုရင် Shift + k ကို နှိပ်ကြည့်ပြီးတော့ kernel ကနေ run နေတဲ့ process တွေကိုပါ မြင်ရမှာ ဖြစ်ပါတယ်။ Process ID (PID) column ကို နှိပ်ကြည့်ပြီးပဲဖြစ်ဖြစ် F7 (Sort) ကိုနှိပ်ပြီးတော့ PID လို့ ရွေးလိုက်တာပဲဖြစ်ဖြစ် process ၁ ကနေ အစဥ်လိုက်တိုင်း အကုန်မြင်ရပါလိမ့်မယ်။

Process ID / PID

Operating system က process တခုစတိုင်း process id တခု သတ်မှတ်တယ်။ ၁ ကနေပြီးတော့ ကိုယ့်ရဲ့ စက်ရဲ့ process limit ထားတဲ့အထိ id တွေ ပေးပါတယ်။ limit ရောက်သွားရင်လည်း မသုံးတော့တဲ့ process id တွေကို ပြန်သုံးပါတယ်။ အဲလိုမှမဟုတ်ပဲ process id တွေအကုန်လုံးလည်း သုံးထားတယ် နောက် process အသစ်လည်း စချင်တယ်ဆိုရင်တော့ error တက်ပါလိမ့်မယ်။ Linux မှာဆို process id တွေ အကုန်ကုန်သွားပြီး ကိုယ့်စက်က resource တွေကို အကုန်ကုန်အောင်လုပ်ပစ်တဲ့ fork bomb လို့ခေါ်တဲ့ virus လိုဟာမျိုးရှိပါတယ်။

bash shell မှာ process တခုကို & နဲ့ run တယ်ဆိုရင် အဲဒီ process က background မှာ run တယ်။ ပြီးတော့ အဲ process ရဲ့ process id (PID) ကို shell မှာ ပြပေးတယ်။

[email protected]:~$ sleep 10 &
[1] 5297

ဒီမှာဆိုရင် 5297 က sleep 10 ရဲ့ process id ပါ

အဲဒီ process id ကို မမြင်လိုက်ရဘူးဆို echo $! လို့ ရိုက်ပြီး နောက်ဆုံး run သွားတဲ့ process ရဲ့ id ကို ကြည့်လို့ရပါတယ်။

ဒီ process id တွေကို အသုံးချပြီးတော့ process နဲ့ ပါတ်သက်တဲ့ information တွေဘယ်ကလာလဲဆိုတာကို /proc/<pid> အောက်မှာ သွားကြည့်လို့ရတယ်။ ဥပမာ process id 5718 ရဲ့ information ဆိုရင် /proc/5718 မှာ သွားကြည့်လို့ရတယ်။

[email protected]:~$ ls /proc/5718/
attr        cmdline          environ  io         mem         ns             pagemap      schedstat  stat     timers
autogroup   comm             exe      limits     mountinfo   numa_maps      personality  sessionid  statm    uid_map
auxv        coredump_filter  fd       loginuid   mounts      oom_adj        projid_map   setgroups  status   wchan
cgroup      cpuset           fdinfo   map_files  mountstats  oom_score      root         smaps      syscall
clear_refs  cwd              gid_map  maps       net         oom_score_adj  sched        stack      task

ဘယ် process id က ဘယ် command ကို ရိုက်လိုက်ပြီးတော့ run သွားတယ်ဆိုတာကို အဲ folder ထဲက cmdline ဆိုတဲ့ file မှာ အခုလို သွားကြည့်လို့ရတယ်။

[email protected]:~$ cat /proc/5718/cmdline
[email protected]:~$

နောက် ဒီ process ကို ဘယ် file directory အောက်ကနေ run သွားတယ် ဘယ် binary file ကို execute လုပ်သွားတယ်ဆိုတာကို အခုလိုလည်း ကြည့်လို့ရတယ်။

[email protected]:~$ ls -l /proc/5718/cwd
lrwxrwxrwx 1 ubuntu ubuntu 0 Jun 14 17:49 /proc/7246/cwd -> /home/ubuntu
[email protected]:~$ ls -l /proc/5718/exe
lrwxrwxrwx 1 ubuntu ubuntu 0 Jun 14 17:49 /proc/7246/exe -> /bin/sleep

အဲတော့ ဒီနည်းနဲ့ပဲ htop မှာ မြင်ရတဲ့ process တွေရဲ့ information တွေကို /proc/<process id>/<file> အောက်ကနေ သွားဖတ်တယ်ဆိုတာ သိနိုင်ပါတယ်။

နောက်ထပ် proc folder အောက်က တခြား file တွေ အကြောင်းသိချင်ရင်တော့ ဒီ manual page မှာ သွားဖတ်လို့ရပါတယ်။