DevOps_UNIX / Linux_9_UNIX / Linux Processes ගැන දැන ගනිමු පළමු කොටස

ja2k17ja

Member
May 10, 2017
185
166
0
තිස්සමහාරාම
DevOps_UNIX / Linux_9_UNIX / Linux Processes ගැන දැන ගනිමු පළමු කොටස

DevOps_UNIX / Linux_9_UNIX / Linux Processes ගැන දැන ගනිමු පළමු කොටස.


ඔයාල මුලින් ම මම මේ කියන කරුණු ටික මතක තියාගන්න. UNIX / Linux සිස්ටම් එකක් තුල program එකක් රන් වුනාම එය  process එකක් විදියට හදුන්වනව. ඒ වගේම යම්කිසි process එකක් background එකේ රන් වෙන විට අපි එයට daemon එකක් කියල කියනව්.
සිස්ටම් එක boot වුනාට පසුව මෙම daemons ඉබේම start වෙනව, ඒකට වෙනම මැකනිසම් එකක් තියෙනව අපි ඉදිරි ලිපිවලදී ඒ ගැනත් කතා කරමු.  මේ කියන daemons ටික background එකේ රන් වීමට අනිවාර්යයෙන්ම අපේ සිස්ටම් එකේ තිබෙන  resources access කරන්න සිදුවෙනව.  එනිසා ඒවා රන් වෙන්නෙ යම්කිසි user account එකක් යටතේ. මොකද සිස්ටම් එකේ ඉන්න users ලට පමණයි එහි තිබෙන resources ටික බාවිතා කිරීමට හැකියාව ඇත්තෙ. මුල්ම කාලයේදී සියලුම daemons රන් වුනේ root යුසර් යටතෙ. මේ ක්‍රමයට daemons රන් කිරීම ඉතා භයානක නිසා වර්තමානයේ බොහොමයක්  daemons සදහා වෙන වෙනම user  එකවුන්ට් UNIX / Linux සිස්ටම් එක සතුව තිබෙනව. මේවට අපි  කියන්නෙ system accounts කියල. උදාහරනයක් ලෙස Ubuntu හි Apache සහ Nginx කියන වෙබ් Servers රන් වෙන්නෙ www-data කියන user (system account එක ) යටතෙ.
මෙම system accounts වලට user name තිබුනත් password නොමැත. ඔයාලට මේ කමාන්ඩ් එකෙන් UNIX / Linux සිස්ටම් එකේ තියෙන system accounts ටිකක් බලාගන්න පුළුවන්. 
ට්‍රයි cat /etc/passwd | grep '/bin/false\|/usr/sbin/nologin' 
nix@Dell ~ $ cat /etc/passwd | grep '/bin/false\|/usr/sbin/nologin'
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
මේ accounts වල පොදුවේ දක්නට ලැබෙන ලක්ෂණයක් වන්නේ default shell එකක් නොමැති වීමයි . ඒ වෙනුවට් ඇත්තේ "/bin/false" හෝ "/usr/sbin/nologin". තවද මේ accounts වලට password නොමැත.
අපි process ගැන ඉගෙන ගන්න කොට මුලින්නම කරන්නෙ UNIX / Linux  සිස්ටම් එකේ රන් වෙන process මොනවද කියල බලාගන්න එකයි අපිට ඒ සදහා බහුලව බාවිතා කරන කමාන්ඩ් එක වන ps යොදාගන්න පුළුවන්. (මතක තියාගන්න ps ට වඩා පහසු කමාන්ඩ්ස් කිහිපයකුත් තියෙනවා නමුත් ps තරම් infomation  ගොඩක් දෙන්න ඒ වාට බෑ)
ps ට පුළුවන් සිස්ටම් එකේ රන් වෙන process එකක විස්තර සැහෙන ප්‍රමාණයක් ලබා දෙන්න. නමුත් ps කියන්නෙ සංකීර්ණ කමාන්ඩ් එකක්. මම ඔයාලට කියල දෙන්නෙ මෙතක් දුරට මම බහුලව ps බාවිතා කළ ආකාරයයි. මම කියල දෙනවට වඩා ps ගැන සැහෙන කරුණු ප්‍රමාණයක් තියෙනව. ps ගැන මම දැනගත් දෙයින් සමහර දේවල් දෙතුන් පාරක්වත් බාවිතා කරලා නෑ, සමහර දේවල් කවමදා වත් බාවිතා කරල නෑ ඉදිරියට බාවිතා කරන එකකුත් නෑ :D 

1) ps
අපි දැන් බලමු අපේ  UNIX / Linux terminal එකේ මේ මොහොතේ රන් වෙන්නේ මොනවද කියල. මේ සදහා අපිට ps කමාන්ඩ් එක බාවිතා කරන්න පුළුවන්.
nix@Dell ~ $ ps
  PID TTY          TIME CMD
24309 pts/0    00:00:00 bash
24383 pts/0    00:00:00 ps
අපිට මේ ආකාරයේ රිසල්ට් එකක් තමයි ලැබුනේ. අපි බලමු මෙනවද මෙයින් අපිට ලබාගත හැකි තොරතුරු කියල. මෙහි PID ලෙස දක්වා ඇත්තේ Process ID (Process Identifiers) එක. Process එකක් අරම්බවී එය අවසන් වනතුරුම එනම් එහි ජිවිත කාලය තුල PID එක වෙනස් නොවේ. කිසියම් Process එකක් අවසන් වූ පසු කලින් එම Process එකට ලැබී තිබුන PID එක වෙනත් Process එකකට හිමි වීමටත් පුළුවන. මේ PID එක 0 සහ 32768 අතර අගයක් ගනී. මෙහිදී 32768 කියන අගය 32-bit සිස්ටම් සදහාද, 2^22 උපරිමයක් දක්වා 64-bit සිස්ටම් සදහා යොදා ගැනීමට පුළුවන්. බොහෝමය Liinux distro වල පෙරනිමි (By Default) උපරිම අගය ලෙස 32768 දක්වා ඇත. අපිට මෙම අගය මෙලෙස බලා ගන්න පුළුවන්.
ට්‍රයි cat /proc/sys/kernel/pid_max
nix@Dell ~ $ cat /proc/sys/kernel/pid_max
32768
nix@Dell ~ $
අපිට ps කමාන්ඩ් එකෙන් ලැබුනෙ process 2ක විස්තර පමණයි. එයට හේතුව ps විතරක් දීමෙන් අපට ලබා ගන්න පුළුවන් වෙන්නෙ අප දැනට සිටින terminal එකේ අපි කමාන්ඩ් එක දෙන ක්ෂණයේ ඇති processes ටික විතරයි.මුල්ම process එක ලෙස එහි පැහැදිලිව සටහන් වෙලා තියෙනව අපි ps කමාන්ඩ් එක දීමට බාවිතා කල shell එක (bash). සහ අපේ ps කමාන්ඩ් එක දෙවන process එක ලෙස. මෙහි TTY ලෙස process රන් වන terminals නිරුපනය කරයි. උදා. pts/0

2) ps -a
අපිට ps -a මගින් සිස්ටම් එකේ තිබෙන සියලුම terminals වලින් මේ මොහොතේ රන් වන processes වල විස්තර ලබා ගන්න පුළුවන්. මේ බලන්න.
nix@Dell ~ $ ps -a
  PID TTY          TIME CMD
25013 pts/0    00:00:00 ping
25014 pts/1    00:00:00 htop
25031 pts/2    00:00:00 ps
nix@Dell ~ $ 
මේ මොහොතේ මගේ සිස්ටම් එකේ terminals 3කින් processes 3ක් රන් කරනවා. pts/0 හි ping ද, pts/1 හි htop ද .මා ඉහත  කමාන්ඩ් එක දෙනු ලැබූ pts/2 හි ps ලෙසද.
ඔයාලට පුළුවන් Linux terminals ලිහිපයක් open කරල මෙය අත්හදා බලන්න. නැතිනම් putty වගේ terminal emulator එකක් යොදාගෙන SSH session කිහිපයකින් Linux සර්වර් එකට ලොග් වෙලා ට්‍රයි කරන්න.

3) ps -t
මෙම ගින් අපිට කිසියම් terminal එකක රන් වන process හි විස්තර දැන ගැනීමට පුළුවන්.
nix@Dell ~ $ tty
/dev/pts/2
nix@Dell ~ $ ps -t /dev/pts/2
  PID TTY          TIME CMD
25015 pts/2    00:00:00 bash
25247 pts/2    00:00:00 ps
nix@Dell ~ $ ps -t pts/2
  PID TTY          TIME CMD
25015 pts/2    00:00:00 bash
25248 pts/2    00:00:00 ps
nix@Dell ~ $ ps -t 2
  PID TTY          TIME CMD
25015 pts/2    00:00:00 bash
25249 pts/2    00:00:00 ps
nix@Dell ~ $ ps -t /dev/pts/0
  PID TTY          TIME CMD
24973 pts/0    00:00:00 bash
25013 pts/0    00:00:00 ping
nix@Dell ~ $ ps -t pts/0
  PID TTY          TIME CMD
24973 pts/0    00:00:00 bash
25013 pts/0    00:00:00 ping
nix@Dell ~ $ ps -t 0
  PID TTY          TIME CMD
24973 pts/0    00:00:00 bash
25013 pts/0    00:00:00 ping
nix@Dell ~ $
අපිට tty කමාන්ඩ් එකෙන් අප ලොග් වී සිටින terminal එක කුමක් ද කියා සොයා ගැනීමට පුළුවන. හොදින් මේ ගැනත් බලන්න.
/dev/pts/2 , pts/2 හා යනු එකම terminal එකයි.  මෙය ෂෝර්ට් හෑන්ඩ් ක්‍රමයක්. අපේ දැනට තියෙන terminals තුනටම "/dev/pts/" කියන කොටස පොදු නිස ps කමාන්ඩ් එකට 0,1,2 ලෙස දුන්විට එයින් අදහස් කරන terminal එක කුමක්ද කියල තේරුම් ගන්න පුළුවන්.

4) ps -f
අපිට ps සමග f ඔප්ෂන් එක දීමෙන් process එක සම්බන්ද විස්තර ගොඩක් ලැයිස්තු ගත කරගන්න පුළුවන්.
මේ බලන්න 
nix@Dell ~ $ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
nix      25015  2175  0 17:17 pts/2    00:00:00 /bin/bash
nix      26094 25015  0 17:41 pts/2    00:00:00 ps -f
nix@Dell ~ $
nix@Dell ~ $ ps -af
UID        PID  PPID  C STIME TTY          TIME CMD
nix      25013 24973  0 17:17 pts/0    00:00:00 ping 8.8.8.8
nix      25014 24993  0 17:17 pts/1    00:00:14 htop
nix      26113 25015  0 17:43 pts/2    00:00:00 ps -af
nix@Dell ~ $ 
මෙහි UID ලෙස සදහන් ව ඇත්තේ process  එක දියත් කල user කවුරුන් ද යන්න, STIME ලෙස ඇත්තේ process එක ආරම්බ වෙන මොහොතේ සිස්ටම් එකේ වෙලාව සහ PPID ලෙස සදහන්ව ඇත්තේ parent process ID එකයි. මට ඔයාලට පොඩි දෙයක් කියල දෙන්න ඕන මේ PPID එක ගැන. අපි මේ උදාහරණය නැවත බලමු.
nix@Dell ~ $ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
nix      25015  2175  0 17:17 pts/2    00:00:00 /bin/bash
nix      26094 25015  0 17:41 pts/2    00:00:00 ps -f
nix@Dell ~ $
ඔයාල දැක්ක ද ps -f හි PPID එක වෙන්නෙ "/bin/bash" හි PID එක කියල? එකට හේතුව තමයි ps -f කියන  process එක දියත් කලේ bash shell මගින් නිසා. 

5) ps -e හා ps -A
ඉහත අවස්ථා 4 න් අපිට ලබා ගැනීමට හැකි වුනේ terminals වලට ලොග් වෙලා ඉන්න තනි තනි users ල මගින් රන් කරපු processes පමණයි. එහිදී system accounts මගින් රන් වන කිසිම process එකක විස්තරයක් අපිට බලා ගන්න බැරිවුණා. අපිට් ps සමග e ඔප්ෂන් එක හෝ A ඔප්ෂන් එක බාවිතා කිරීමෙන් සිස්ටම් එකේ රන් වන සියලුම processes වල ලැයිස්තුවක් ලබාගන්න පුළුවන්. එකට තව f ඔප්ෂන් එකත් එකතු කිරීමෙන් සවිස්තරාත්මක ලැයිස්තුවක් ගන්න පුළුවන්.
මේ බලන්න 
nix@Dell ~ $ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:04 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:03 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:31 rcu_sched
    8 ?        00:00:00 rcu_bh
    9 ?        00:00:00 migration/0
   10 ?        00:00:00 watchdog/0
   11 ?        00:00:00 watchdog/1
   12 ?        00:00:00 migration/1
   13 ?        00:00:01 ksoftirqd/1
   15 ?        00:00:00 kworker/1:0H
   16 ?        00:00:00 watchdog/2
   17 ?        00:00:00 migration/2
   18 ?        00:00:03 ksoftirqd/2
----
----
26302 ?        00:00:00 kworker/3:2
26317 ?        00:00:00 kworker/u16:1
26324 ?        00:00:00 kworker/2:1
26342 ?        00:00:00 kworker/0:0
26348 ?        00:00:00 kworker/1:1
26349 ?        00:00:00 kworker/3:1
26355 ?        00:00:00 kworker/u16:3
26363 pts/2    00:00:00 ps
nix@Dell ~ $
nix@Dell ~ $ ps -A
  PID TTY          TIME CMD
    1 ?        00:00:04 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:03 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:31 rcu_sched
    8 ?        00:00:00 rcu_bh
    9 ?        00:00:00 migration/0
   10 ?        00:00:00 watchdog/0
   11 ?        00:00:00 watchdog/1
   12 ?        00:00:00 migration/1
   13 ?        00:00:01 ksoftirqd/1
   15 ?        00:00:00 kworker/1:0H
   16 ?        00:00:00 watchdog/2
   17 ?        00:00:00 migration/2
   18 ?        00:00:03 ksoftirqd/2
----
----
26302 ?        00:00:00 kworker/3:2
26317 ?        00:00:00 kworker/u16:1
26324 ?        00:00:00 kworker/2:1
26342 ?        00:00:00 kworker/0:0
26348 ?        00:00:00 kworker/1:1
26349 ?        00:00:00 kworker/3:1
26355 ?        00:00:00 kworker/u16:3
26393 pts/2    00:00:00 ps
දැන් f එකතු කර බලමු.
nix@Dell ~ $ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 06:04 ?        00:00:04 /sbin/init splash
root         2     0  0 06:04 ?        00:00:00 [kthreadd]
root         3     2  0 06:04 ?        00:00:03 [ksoftirqd/0]
root         5     2  0 06:04 ?        00:00:00 [kworker/0:0H]
root         7     2  0 06:04 ?        00:00:31 [rcu_sched]
root         8     2  0 06:04 ?        00:00:00 [rcu_bh]
root         9     2  0 06:04 ?        00:00:00 [migration/0]
root        10     2  0 06:04 ?        00:00:00 [watchdog/0]
root        11     2  0 06:04 ?        00:00:00 [watchdog/1]
root        12     2  0 06:04 ?        00:00:00 [migration/1]
root        13     2  0 06:04 ?        00:00:01 [ksoftirqd/1]
root        15     2  0 06:04 ?        00:00:00 [kworker/1:0H]
root        16     2  0 06:04 ?        00:00:00 [watchdog/2]
root        17     2  0 06:04 ?        00:00:00 [migration/2]
root        18     2  0 06:04 ?        00:00:03 [ksoftirqd/2]
root        20     2  0 06:04 ?        00:00:00 [kworker/2:0H]
---
---
---

5) ps -u
අපිට කිසියම් user account හෝ system accounts  එකක් මගින් රන් වෙන processes හි විස්තර ලබා ගැනීමට මෙම කමාන්ඩ් එක යොදා ගැනීමට පුළුවන්.
nix@Dell ~ $ ps -u www-data
  PID TTY          TIME CMD
 1191 ?        00:00:02 nginx
 1192 ?        00:00:02 nginx
 1193 ?        00:00:00 nginx
 1194 ?        00:00:02 nginx
nix@Dell ~ $

6) ps -fH, ps -efH හා ps -eH
ඔයාල මේ කමාන්ඩ් ටිකත් ට්‍රයි කරලා බලන්න එවිට ඔයාලට parent processes ගැන හොද අවබෝදයක් ලබාගන්න පුළුවන්.
** අපිට් මෙලෙස ps මගින් ලැබෙන output එක pipe මගින් තවත් කමාන්ඩ් එක කට යොමු කරගන පුළුවන්. ඔයාලත් මේ විදියට පොඩි පොඩි සෙල්ලම් ටිකක් දාල බලන්න.
nix@Dell ~ $ ps -ef | grep nginx
root      1190     1  0 06:04 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  1191  1190  0 06:04 ?        00:00:02 nginx: worker process
www-data  1192  1190  0 06:04 ?        00:00:02 nginx: worker process
www-data  1193  1190  0 06:04 ?        00:00:00 nginx: worker process
www-data  1194  1190  0 06:04 ?        00:00:02 nginx: worker process
nix      26590 25015  0 18:23 pts/2    00:00:00 grep --color=auto nginx
nix@Dell ~ $
nix@Dell ~ $ ps -ef | grep nginx | wc -l
6
nix@Dell ~ $
මෙහි දෙවෙන කොටසින් අපි Background Process, Foreground process, Killing a Process සහ nohup ගැන ඉගෙන ගනිමු.

යලිත් දවසක හමුවෙමු.
ස්තුතියි.
 
Last edited:

ja2k17ja

Member
May 10, 2017
185
166
0
තිස්සමහාරාම
පලවෙනි ත්‍රෙඩ් එකේ ලින්ක් ඒක දෙනවද ?
මේක තමයි මුල්ම ලිපිය http://www.elakiri.com/forum/showthread.php?t=1802828

දැනට එළකිරි එකට ලියපු ලිපි සියල්ල මෙතන backups එකක් විදියට තියෙනව.
මේකට ලිපිය publish වෙන්න ටික දවසක් යනව. මට ඉඩ තියෙන විදියට තමා update කරන්නෙ.

https://thelinux.club/category/2/unix-linux-ම-ල-ක-කම-න-ඩ-ස
 
Last edited: