DevOps_UNIX / Linux_9_UNIX / Linux Processes ගැන දැන ගනිමු දෙවන කොටස - Job control

ja2k17ja

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

DevOps_UNIX / Linux_9_UNIX / Linux Processes ගැන දැන ගනිමු දෙවන කොටස - Job control

අපි කලින් පාඩමෙන් ඉගෙන ගත්තෙ UNIX / Linux processes ගැන. අපි අද පාඩමෙන් ඉගෙන ගනිමු UNIX / Linux Jobs ගැන. Job එකක් කියන්නෙත් process එකක් තමයි. වෙනසකට තියෙනෙ මෙය user කෙනෙක් විසින් shell  එකේ start කරන daemon එකක් නොවන  background process එකක්. හොදින් මතක තියා ගන්න job එකක් එය start කරපු shell එක සමග පමණක් සම්බන්ද වෙලා තියෙනව කියල. ඒක නිසා යම් හෙයකින් user එම shell එකෙන් ඉවත් වුවිට උදාහරණයක් ලෙස logout හෝ terminal එක disconnect වුනොත් එම user ව start කරපු job එක ද නතර වෙනව (මෙම තත්වය මග හැර ගැනීමට අපි උපක්‍රමක් යොදනව අපි ඒ ගැනත් අද කතා කරනව).අපි මේ සියල්ල උදාහරණ මගන් තේරුම් ගැනීමට උත්සහ කරමු.

1) Process IDs,  Job Numbers සහ background process

අපි කලින් පාඩමෙන් විස්තර කලා PID - Process ID ගැන. අපි දැන් බලමු මොකක් ද මේ Job Numbers කියල කියන්නෙ කියල. මම හිතනව එය පොඩි උදාහරණය කින් පැහැදිලි කරන එක වටිනව කියල. අපි මෙන්න මේ කමාන්ඩ් එකෙන් වෙන දේ මුලින්ම බලමු.

ට්‍රයි ping 127.0.0.01 1> /dev/null
nix@Dell ~ $ ping 127.0.0.01 1> /dev/null
^Cnix@Dell ~ $
මම මෙහි දී "ping 127.0.0.01 1> /dev/null" එක රන් කරල සුළු මොහතකින් Ctrl c ලබා දුන්න. ඉහත output එකේ එය "^C" ලෙස සටහන් වෙලා තියෙනව. Ctrl c (^C) ගැන විස්තර පසුවට තබමි.
අපි කමාන්ඩ් එකක් ඉහත ආකාරය ට රන් කරනවි ට අපි එම ක්‍රමයට කියනව Foreground process එකක් කියල. අපි මෙලෙස Foreground process එකක් රන් කරන විට අපිට අලුතෙන් තව  කමාන්ඩ් එකක් දීමට පෙර shell එකේ තිබෙන  Foreground process එක අවසන් වන තුරු බලා සිටීමට හෝ Ctrl c බාවිතා කර abort කිරීමට සිදුවෙනව.
අපි දැන් බලමු කොහොම ද මේ කමාන්ඩ් එක background process එකක් ලෙස background එකේ රන් කරන්න.

ට්‍රයි ping 127.0.0.01 1> /dev/null &
nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[1] 9480
nix@Dell ~ $
අපිට කමාන්ඩ් එකක අවසානයට & සංකේතය දීමෙන් එම කමාන්ඩ් එක background process එකක් ලෙස රන් කිරීමට පුළුවන්. අපි ඒ ආකාරයට process එකක් background එකේ රන් කරන විට එය Job එකක් ලෙස හදුන් වනවා. දැන් මම කියපු දේ හොදින් මතක තියාගන්න. මේ විදියට මතක තිය ගත්තොත් ඔයාලට හරිම පහසුවෙන් තේරුම් ගන්න පුළුවන්.
ඉහත උදාහරණයේ 9480 කියන්නෙ PID එකට සහ [1] කියන්නෙ job නම්බර් එක. දැක්ක නේද job number එකක් දෙන්නෙ process එක background process එකක් බව ට පත්වුනාට පසුයි. හොදින් මතක තියාගන්න මේ job number එක දැන් ඔයාල ලොග් වෙලා ඉන්න terminal එකේ shell එකට පමණක් unique number එකක් විතරයි.  ඔයාල තවත් terminal එකක shell එක කින් තවත් background process එකක් (job) එකක් පටන් ගත්තොත් එහිද job නම්බර් එක ද [1] විය හැක. මෙයට හේතුව තමයි job number එක assigned කරන්නෙ අපේ current  shell එකෙන් නිසා. PID එක assigned කරන්නෙ UNIX / Linux  kernel එකෙන් කියල හොදින් මතක තියාගන්න.

මේ බලන්න .
මම තවත් terminal එකක් open කරල ඉහත කමාන්ඩ් එකම දුන්න.
nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[1] 9563
nix@Dell ~ $
අපි දැන් ps -a දීල චෙක් කරගනිමු.
nix@Dell ~ $ ps -a
  PID TTY          TIME CMD
 9480 pts/0    00:00:00 ping
 9563 pts/3    00:00:00 ping
10262 pts/3    00:00:00 ps
nix@Dell ~ $ 
දැක්ක නේද 
9480 රන් වෙන්නෙ pts/0 එකේ. එහි job number එක වෙන්නෙ [1]
9563 රන් වෙන්නෙ pts/3 එකේ. එහි ද job number එක වෙන්නෙ [1]

අපි දැන් තව ping 127.0.0.01 1> /dev/null & කියා job එකක් අපේ පලවෙනි shell එකේ (terminal /dev/pts/0) ආරම්බ කරමු .

ට්‍රයි ping 127.0.0.01 1> /dev/null &
nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[2] 11324
nix@Dell ~ $
එහි job number එක [2] සහ PID එක 11324. මම දැන් ඔයාලට කියල දෙන්නෙ අපේ shell එකේ තියෙන job (background process) මොනවද කියල බලාගන්න ක්‍රමයක්. අපි එකට බාවිතා කරන්නෙ jobs කියන කමාන්ඩ් එක.

ට්‍රයි jobs
nix@Dell ~ $ jobs
[1]-  Running                 ping 127.0.0.01 > /dev/null &
[2]+  Running                 ping 127.0.0.01 > /dev/null &
nix@Dell ~ $
අපිට jobs සමග l ඔප්ෂන් එක දීමෙන් job number එක සහ PID එක යන දෙකම සහිත ලැයිස්තුවක් ගන්න පුළුවන්.

ට්‍රයි jobs -l
nix@Dell ~ $ jobs -l
[1]-  9480 Running                 ping 127.0.0.01 > /dev/null &
[2]+ 11324 Running                 ping 127.0.0.01 > /dev/null &
nix@Dell ~ $
දැන් අපි දන්නව කොහොමද process එකක් background process එකක් (job) විදියට රන් කරන ආකාරය සහ  මොනව ද මේ job number එක කියන්නෙ කියල . අපිට මේ job number එකෙන් ලොකු ලොකු සෙල්ලම් ටිකක් පසුවට කරන්න පුළුවන්.


2) background process (job) එකක් Foreground එකට ගැනීම.

මම කලින් කියපු ආකාරයට job number එක බාවිතා කරල අපිට background process එකක් මේ විදියට Foreground එකට ගන්න පුළුවන්. අපි ඒ සදහා fg කියන built-in කමාන්ඩ් එක බාවිතා කරනවා . fg එක shell එකේ built-in කමාන්ඩ් එකක්. මම පොඩි අමතර කරුණක් කියන්නම්. අපිට මෙන්න මේ විදියට යම්කිසි කමාන්ඩ් එකක් built-in ද නැද්ද කියල දන ගන්න පුළුවන්.

ට්‍රයි type -a fg
nix@Dell ~ $ type -a fg
fg is a shell builtin
nix@Dell ~ $
nix@Dell ~ $ type -a vi
vi is /usr/bin/vi
nix@Dell ~ $
මෙන්න මේකත් පොඩ්ඩක් බලන්න.
nix@Dell ~ $ type -a echo
echo is a shell builtin
echo is /bin/echo
nix@Dell ~ $
අපි නැවතත් fg ගැන කතා කරමු. 
මේ fg කමාන්ඩ් එක විතරක් රන් කිරීමෙන් අපිට පුළුවන් current shell එකෙන් අවසන් වරට Background එකට යොමු කරපු process එක Foreground එකට ගන්න.
අපි ඒ විදියට මුලින්නම කරලා බලමු.

ට්‍රයි fg
nix@Dell ~ $ fg
ping 127.0.0.01 > /dev/null
දැන් ඔයාලට තේරෙනව Foreground අවට පස්සෙ අපිට එම process එක අවසන් වන තුරු බලාගෙන ඉන්න ඕන තවත් කමාන්ඩ් එකක් දෙන්න, නැතිනම් ඒක ආපසු Background එකට යොමු කරන්න ඕන. අපි දැන් බලමු අපේ Foreground job එක කොහොමද Background එකට යොමු කරන්නෙ කියල. අපිට Ctrl z ප්‍රෙස් කරල නැවත Background එකට යොමු කරන්න පුළුවන්.

ට්‍රයි Ctrl z 
nix@Dell ~ $ fg
ping 127.0.0.01 > /dev/null
^Z
[2]+  Stopped                 ping 127.0.0.01 > /dev/null
nix@Dell ~ $
හොදින් මතක තියා ගන්න ඉතා වැදගත් දෙයක් දැන් කියන්න යන්නෙ. අපි මේ විදියට Ctrl z දුන් විට එම process එක suspend වෙලා තමයි Background එකට යොමු වෙන්නෙ. හොදින් බලන්න මේ ලයින් එක.
අපි මේ ක්‍රියාවලියට Suspending a Job කියලත් කියනව.
[2]+  Stopped                 ping 127.0.0.01 > /dev/null
jobs -l කමාන්ඩ් එක දීල චෙක් කර ගනිමු.

ට්‍රයි jobs -l
nix@Dell ~ $ jobs -l
[1]-  9480 Running                 ping 127.0.0.01 > /dev/null &
[2]+ 11324 Stopped                 ping 127.0.0.01 > /dev/null
nix@Dell ~ $
 
කතාව හරි. ඔය සිංහලෙන් එකෙත්  කියල තියෙන්නෙ Stopped කියල. දැන් ඊළගට තියන ගැටලුව තමයි job number [2] කියන job එකේ ස්ටේටස් එක "Running" වලට හරවන්නෙ (to execute in background) කියල. අපි ඒ සදහා bg කියන built-in කමාන්ඩ් එක බාවිතා කරනව.

ට්‍රයි bg %2
nix@Dell ~ $ bg %2
[2]+ ping 127.0.0.01 > /dev/null &
nix@Dell ~ $
මෙහි %2 හි තේරුම් තමයි job නම්බර් 2 කියන එක.
අපි දැන් බලමු fg %1 දීල මෙහි %1 හි තේරුම් තමයි job නම්බර් 1 කියන එක.
nix@Dell ~ $ fg %1
ping 127.0.0.01 > /dev/null
අපිට මේ "ping 127.0.0.01 > /dev/null" process එක terminate කරන්න ඕන නම් එය Foreground තියෙන අවස්ථාවේ Ctrl c දීමෙන් එය සිදු කරගන්න පුළුවන්.
මේ බලන්න 
nix@Dell ~ $ fg %1
ping 127.0.0.01 > /dev/null
^Cnix@Dell ~ $ jobs -l
[2]+ 11324 Running                 ping 127.0.0.01 > /dev/null &
nix@Dell ~ $ 
දැන් අපිට jobs -l මගින් ලැබෙන්නෙ job number [2] ගැන විස්තර පමණයි.
අපිට ඕන නම් job number [2] කියන එක Foreground නොගෙන terminate කරන්න පුළුවන්.

ට්‍රයි kill %2
nix@Dell ~ $ kill %2
nix@Dell ~ $
දැන් අපි jobs -l පාරක් දීල බලමු.

ට්‍රයි jobs -l
nix@Dell ~ $ jobs -l
[2]+ 11324 Terminated              ping 127.0.0.01 > /dev/null
nix@Dell ~ $
ඔය කියල තියෙන්නෙ Terminated කියල. අපි නැවත පාරක්  jobs -l දීල බලමු.

ට්‍රයි jobs -l 
nix@Dell ~ $ jobs -l
nix@Dell ~ $ 
එවිට කිසිදෙයක් නෑ.

මතක තියාගන්න job එකක් Terminated වුනාට පස්සෙ jobs -l කමාන්ඩ් එක මගින් එක සැරයි Terminated කියල පෙන්නන්නෙ.

අපි දැන් jobs -l කමාන්ඩ් එකේ රිසල්ට් එකෙන් පෙන්නන job ස්ටෙටස් මොනවද කියල බලමු. අපි උදාහරණයක් ලෙස මේ ping කමාන්ඩ් එක යොදා ගනිමු.

ට්‍රයි ping 0 -c 10 හෝ ping 127.0.0.1 -c 10
nix@Dell ~ $ ping 0 -c 10
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.030 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.059 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.055 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.050 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.061 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.037 ms
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.062 ms
--- 0 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8995ms
rtt min/avg/max/mdev = 0.030/0.052/0.074/0.013 ms
nix@Dell ~ $
මේ කමාන්ඩ් එකෙන් වෙන්නේ අපේ localhost එකට packet 10ක් යවල අන්තිමට ඉබේම exit වෙනවා. අපි මේ කමාන්ඩ් එකේ stdout එක මුලින් වගේ /dev/null එකට redirect කරල Background job එකක් විදියට රන් කරලා. සැරෙන් සැරේ jobs -l කරල බලමු.
nix@Dell ~ $ ping 0 -c 10 1>/dev/null&
[1] 13190
nix@Dell ~ $ jobs -l
[1]+ 13190 Running                 ping 0 -c 10 > /dev/null &
nix@Dell ~ $ jobs -l
[1]+ 13190 Running                 ping 0 -c 10 > /dev/null &
nix@Dell ~ $ jobs -l
[1]+ 13190 Done                    ping 0 -c 10 > /dev/null
nix@Dell ~ $ jobs -l
nix@Dell ~ $
අපි අවසාන වශයෙන් ඉගෙන ගනිමු කොහොම ද අපි process එකක් user ව සිස්ටම් එකෙන් logout වුනත් එක දිගටම Background එකේ රන් කරන්නේ කියල. අපි මේ සදහා nohup කියන කමාන්ඩ් එක උපකාරී කරගන්නව. අපි එය උදාහරණයකින් තේරුම් ගනිමු. (nohup කියන්නෙ No Hang Ups)

ට්‍රයි nohup ping 0 1>/dev/null &
nix@Dell ~ $ nohup ping 0 1>/dev/null &
[1] 15433
nix@Dell ~ $ nohup: ignoring input and redirecting stderr to stdout
nix@Dell ~ $
ට්‍රයි jobs -l
nix@Dell ~ $ jobs -l
[1]+ 15433 Running                 nohup ping 0 > /dev/null &
nix@Dell ~ $
ට්‍රයි exit 
(මගේ terminal එක closed වුණා)


අපි නැවතත් terminal එකකට ලොග් වෙලා තාමත් process එක Background එකේ රන් වෙනවද කියල බලමු.

ට්‍රයි ps -ef|grep 15433
nix@Dell ~ $ ps -ef|grep 15433
nix      15433     1  0 17:46 ?        00:00:00 ping 0
nix      15451 15435  0 17:48 pts/0    00:00:00 grep --color=auto 15433
nix@Dell ~ $
ඔය තියෙන්නෙ තාමත් රන් වෙවී. මතක තියාගන්න දැන් මේ process එකට terminal එකකට attached වෙලා නෑ .ඒ වගේම ආපසු Foreground එකට ගෙන ඒමටත් නොහැක. අපිට මේක කැමතිනම් kill කරන්න පුළුවන්. නැතිනම් දිගටම රන් වෙවී තියන්න පුළුවන්. කමක් නෑ අපි terminate කරල දාමු.

ට්‍රයි kill 15433
nix@Dell ~ $ kill 15433
නැවතත් ps -ef|grep 15433 දීල බලමු.
nix@Dell ~ $ ps -ef|grep 15433
nix      15496 15435  0 17:55 pts/0    00:00:00 grep --color=auto 15433
nix@Dell ~ $
දැන් අපිට PID එක 15433 වන process එක සොයාගන්න බෑ . ඒකියන්නෙ ඕල් රෙඩි ටෙර්මිනේටඩ් කියල තමයි.

මම කියල දීපු දේවල් නිතර නිතර කරල බලන්න. හොදේ... අදට පාඩම අවසානයි. 

UNIX / Linux මූලික commands පාඩම් මාලාවේ අවසන් පාඩම සමගින් නැවත හමු වෙමු.
ස්තුතියි.
 
Last edited:

TNHM

Well-known member
  • Jan 3, 2017
    5,332
    15,496
    113
    Nice machn. Mama aws ekka wada karanne. Danne nathi ayata watinawa.
    Math samahara ewa dana gaththa.
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    මචන් මගේ ලග ARM linux embedded system එකක් තියෙනවා. මේකේ spec එක 64MB RAM, 128MB storage එකක් තියෙන්නේ. මචන් මේකට app develop කරන්න gcc toolchain එකක් තියෙනවා. PC එකේ compile කරලා තමා development කරන්නේ. එත් මචන් මට දැන් ඕනි කරලා තියෙනවා system එකේම application එකක් build කරන්න. system එකේ gcc compiler එකක් නැහැ. install කරන්න විදිහක් නැහැ පොඩි storage එකක් තියෙන්නේ. කොහොමද මචන් මට මේක කරන්න පුළුවන්. අදහසක් දෙන්න පුලුවන්ද?
     

    ja2k17ja

    Member
    May 10, 2017
    185
    166
    0
    තිස්සමහාරාම
    මචන් මගේ ලග ARM linux embedded system එකක් තියෙනවා. මේකේ spec එක 64MB RAM, 128MB storage එකක් තියෙන්නේ. මචන් මේකට app develop කරන්න gcc toolchain එකක් තියෙනවා. PC එකේ compile කරලා තමා development කරන්නේ. එත් මචන් මට දැන් ඕනි කරලා තියෙනවා system එකේම application එකක් build කරන්න. system එකේ gcc compiler එකක් නැහැ. install කරන්න විදිහක් නැහැ පොඩි storage එකක් තියෙන්නේ. කොහොමද මචන් මට මේක කරන්න පුළුවන්. අදහසක් දෙන්න පුලුවන්ද?
    ඔයාගෙ board එකේ මොඩෙල් එක මොකක්ද Hardware spec එක කියන්න පුලුවන්ද , මොනවද තියෙන interfaces ? usb ?
     

    vsj

    Member
    Sep 23, 2014
    317
    5
    0
    ගොඩක් පින් මේවා කියල දෙනවට.මමත් මේ දවස් වල උබුන්ටු server එකක squid transparent proxy එකක් install කරගෙන යනවා. දිගටම කරගෙන යන්න.අලුත් දේ ගොඩක් මේකෙන් ඉගෙන ගත්ත.