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
අපි කමාන්ඩ් එකක් ඉහත ආකාරය ට රන් කරනවි ට අපි එම ක්රමයට කියනව Foreground process එකක් කියල. අපි මෙලෙස Foreground process එකක් රන් කරන විට අපිට අලුතෙන් තව කමාන්ඩ් එකක් දීමට පෙර shell එකේ තිබෙන Foreground process එක අවසන් වන තුරු බලා සිටීමට හෝ Ctrl c බාවිතා කර abort කිරීමට සිදුවෙනව.
අපි දැන් බලමු කොහොම ද මේ කමාන්ඩ් එක background process එකක් ලෙස background එකේ රන් කරන්න.
ට්රයි ping 127.0.0.01 1> /dev/null &
ඉහත උදාහරණයේ 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 කරල ඉහත කමාන්ඩ් එකම දුන්න.
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 &
ට්රයි jobs
ට්රයි jobs -l
2) background process (job) එකක් Foreground එකට ගැනීම.
මම කලින් කියපු ආකාරයට job number එක බාවිතා කරල අපිට background process එකක් මේ විදියට Foreground එකට ගන්න පුළුවන්. අපි ඒ සදහා fg කියන built-in කමාන්ඩ් එක බාවිතා කරනවා . fg එක shell එකේ built-in කමාන්ඩ් එකක්. මම පොඩි අමතර කරුණක් කියන්නම්. අපිට මෙන්න මේ විදියට යම්කිසි කමාන්ඩ් එකක් built-in ද නැද්ද කියල දන ගන්න පුළුවන්.
ට්රයි type -a fg
මේ fg කමාන්ඩ් එක විතරක් රන් කිරීමෙන් අපිට පුළුවන් current shell එකෙන් අවසන් වරට Background එකට යොමු කරපු process එක Foreground එකට ගන්න.
අපි ඒ විදියට මුලින්නම කරලා බලමු.
ට්රයි fg
ට්රයි Ctrl z
අපි මේ ක්රියාවලියට Suspending a Job කියලත් කියනව.
ට්රයි jobs -l
කතාව හරි. ඔය සිංහලෙන් එකෙත් කියල තියෙන්නෙ Stopped කියල. දැන් ඊළගට තියන ගැටලුව තමයි job number [2] කියන job එකේ ස්ටේටස් එක "Running" වලට හරවන්නෙ (to execute in background) කියල. අපි ඒ සදහා bg කියන built-in කමාන්ඩ් එක බාවිතා කරනව.
ට්රයි bg %2
අපි දැන් බලමු fg %1 දීල මෙහි %1 හි තේරුම් තමයි job නම්බර් 1 කියන එක.
මේ බලන්න
අපිට ඕන නම් job number [2] කියන එක Foreground නොගෙන terminate කරන්න පුළුවන්.
ට්රයි kill %2
ට්රයි jobs -l
ට්රයි jobs -l
මතක තියාගන්න job එකක් Terminated වුනාට පස්සෙ jobs -l කමාන්ඩ් එක මගින් එක සැරයි Terminated කියල පෙන්නන්නෙ.
අපි දැන් jobs -l කමාන්ඩ් එකේ රිසල්ට් එකෙන් පෙන්නන job ස්ටෙටස් මොනවද කියල බලමු. අපි උදාහරණයක් ලෙස මේ ping කමාන්ඩ් එක යොදා ගනිමු.
ට්රයි ping 0 -c 10 හෝ ping 127.0.0.1 -c 10
ට්රයි nohup ping 0 1>/dev/null &
(මගේ terminal එක closed වුණා)
අපි නැවතත් terminal එකකට ලොග් වෙලා තාමත් process එක Background එකේ රන් වෙනවද කියල බලමු.
ට්රයි ps -ef|grep 15433
ට්රයි kill 15433
මම කියල දීපු දේවල් නිතර නිතර කරල බලන්න. හොදේ... අදට පාඩම අවසානයි.
UNIX / Linux මූලික commands පාඩම් මාලාවේ අවසන් පාඩම සමගින් නැවත හමු වෙමු.
ස්තුතියි.
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
මම මෙහි දී "ping 127.0.0.01 1> /dev/null" එක රන් කරල සුළු මොහතකින් Ctrl c ලබා දුන්න. ඉහත output එකේ එය "^C" ලෙස සටහන් වෙලා තියෙනව. Ctrl c (^C) ගැන විස්තර පසුවට තබමි.nix@Dell ~ $ ping 127.0.0.01 1> /dev/null
^Cnix@Dell ~ $
අපි කමාන්ඩ් එකක් ඉහත ආකාරය ට රන් කරනවි ට අපි එම ක්රමයට කියනව Foreground process එකක් කියල. අපි මෙලෙස Foreground process එකක් රන් කරන විට අපිට අලුතෙන් තව කමාන්ඩ් එකක් දීමට පෙර shell එකේ තිබෙන Foreground process එක අවසන් වන තුරු බලා සිටීමට හෝ Ctrl c බාවිතා කර abort කිරීමට සිදුවෙනව.
අපි දැන් බලමු කොහොම ද මේ කමාන්ඩ් එක background process එකක් ලෙස background එකේ රන් කරන්න.
ට්රයි ping 127.0.0.01 1> /dev/null &
අපිට කමාන්ඩ් එකක අවසානයට & සංකේතය දීමෙන් එම කමාන්ඩ් එක background process එකක් ලෙස රන් කිරීමට පුළුවන්. අපි ඒ ආකාරයට process එකක් background එකේ රන් කරන විට එය Job එකක් ලෙස හදුන් වනවා. දැන් මම කියපු දේ හොදින් මතක තියාගන්න. මේ විදියට මතක තිය ගත්තොත් ඔයාලට හරිම පහසුවෙන් තේරුම් ගන්න පුළුවන්.nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[1] 9480
nix@Dell ~ $
ඉහත උදාහරණයේ 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 කරල ඉහත කමාන්ඩ් එකම දුන්න.
අපි දැන් ps -a දීල චෙක් කරගනිමු.nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[1] 9563
nix@Dell ~ $
දැක්ක නේද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 &
එහි job number එක [2] සහ PID එක 11324. මම දැන් ඔයාලට කියල දෙන්නෙ අපේ shell එකේ තියෙන job (background process) මොනවද කියල බලාගන්න ක්රමයක්. අපි එකට බාවිතා කරන්නෙ jobs කියන කමාන්ඩ් එක.nix@Dell ~ $ ping 127.0.0.01 1> /dev/null &
[2] 11324
nix@Dell ~ $
ට්රයි jobs
අපිට jobs සමග l ඔප්ෂන් එක දීමෙන් job number එක සහ PID එක යන දෙකම සහිත ලැයිස්තුවක් ගන්න පුළුවන්.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
දැන් අපි දන්නව කොහොමද process එකක් background process එකක් (job) විදියට රන් කරන ආකාරය සහ මොනව ද මේ job number එක කියන්නෙ කියල . අපිට මේ job number එකෙන් ලොකු ලොකු සෙල්ලම් ටිකක් පසුවට කරන්න පුළුවන්.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 ~ $
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 ~ $
අපි නැවතත් fg ගැන කතා කරමු.nix@Dell ~ $ type -a echo
echo is a shell builtin
echo is /bin/echo
nix@Dell ~ $
මේ fg කමාන්ඩ් එක විතරක් රන් කිරීමෙන් අපිට පුළුවන් current shell එකෙන් අවසන් වරට Background එකට යොමු කරපු process එක Foreground එකට ගන්න.
අපි ඒ විදියට මුලින්නම කරලා බලමු.
ට්රයි fg
දැන් ඔයාලට තේරෙනව Foreground අවට පස්සෙ අපිට එම process එක අවසන් වන තුරු බලාගෙන ඉන්න ඕන තවත් කමාන්ඩ් එකක් දෙන්න, නැතිනම් ඒක ආපසු Background එකට යොමු කරන්න ඕන. අපි දැන් බලමු අපේ Foreground job එක කොහොමද Background එකට යොමු කරන්නෙ කියල. අපිට Ctrl z ප්රෙස් කරල නැවත Background එකට යොමු කරන්න පුළුවන්.nix@Dell ~ $ fg
ping 127.0.0.01 > /dev/null
ට්රයි Ctrl z
හොදින් මතක තියා ගන්න ඉතා වැදගත් දෙයක් දැන් කියන්න යන්නෙ. අපි මේ විදියට Ctrl z දුන් විට එම process එක suspend වෙලා තමයි Background එකට යොමු වෙන්නෙ. හොදින් බලන්න මේ ලයින් එක.nix@Dell ~ $ fg
ping 127.0.0.01 > /dev/null
^Z
[2]+ Stopped ping 127.0.0.01 > /dev/null
nix@Dell ~ $
අපි මේ ක්රියාවලියට Suspending a Job කියලත් කියනව.
jobs -l කමාන්ඩ් එක දීල චෙක් කර ගනිමු.[2]+ Stopped ping 127.0.0.01 > /dev/null
ට්රයි 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
මෙහි %2 හි තේරුම් තමයි job නම්බර් 2 කියන එක.nix@Dell ~ $ bg %2
[2]+ ping 127.0.0.01 > /dev/null &
nix@Dell ~ $
අපි දැන් බලමු fg %1 දීල මෙහි %1 හි තේරුම් තමයි job නම්බර් 1 කියන එක.
අපිට මේ "ping 127.0.0.01 > /dev/null" process එක terminate කරන්න ඕන නම් එය Foreground තියෙන අවස්ථාවේ Ctrl c දීමෙන් එය සිදු කරගන්න පුළුවන්.nix@Dell ~ $ fg %1
ping 127.0.0.01 > /dev/null
මේ බලන්න
දැන් අපිට jobs -l මගින් ලැබෙන්නෙ job number [2] ගැන විස්තර පමණයි.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 ~ $
අපිට ඕන නම් job number [2] කියන එක Foreground නොගෙන terminate කරන්න පුළුවන්.
ට්රයි kill %2
දැන් අපි jobs -l පාරක් දීල බලමු.nix@Dell ~ $ kill %2
nix@Dell ~ $
ට්රයි jobs -l
ඔය කියල තියෙන්නෙ Terminated කියල. අපි නැවත පාරක් jobs -l දීල බලමු.nix@Dell ~ $ jobs -l
[2]+ 11324 Terminated ping 127.0.0.01 > /dev/null
nix@Dell ~ $
ට්රයි 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
මේ කමාන්ඩ් එකෙන් වෙන්නේ අපේ localhost එකට packet 10ක් යවල අන්තිමට ඉබේම exit වෙනවා. අපි මේ කමාන්ඩ් එකේ stdout එක මුලින් වගේ /dev/null එකට redirect කරල Background job එකක් විදියට රන් කරලා. සැරෙන් සැරේ jobs -l කරල බලමු.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 ~ $
අපි අවසාන වශයෙන් ඉගෙන ගනිමු කොහොම ද අපි process එකක් user ව සිස්ටම් එකෙන් logout වුනත් එක දිගටම Background එකේ රන් කරන්නේ කියල. අපි මේ සදහා nohup කියන කමාන්ඩ් එක උපකාරී කරගන්නව. අපි එය උදාහරණයකින් තේරුම් ගනිමු. (nohup කියන්නෙ No Hang Ups)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 ~ $
ට්රයි nohup ping 0 1>/dev/null &
ට්රයි jobs -lnix@Dell ~ $ nohup ping 0 1>/dev/null &
[1] 15433
nix@Dell ~ $ nohup: ignoring input and redirecting stderr to stdout
nix@Dell ~ $
ට්රයි exitnix@Dell ~ $ jobs -l
[1]+ 15433 Running nohup ping 0 > /dev/null &
nix@Dell ~ $
(මගේ terminal එක closed වුණා)
අපි නැවතත් terminal එකකට ලොග් වෙලා තාමත් process එක Background එකේ රන් වෙනවද කියල බලමු.
ට්රයි ps -ef|grep 15433
ඔය තියෙන්නෙ තාමත් රන් වෙවී. මතක තියාගන්න දැන් මේ process එකට terminal එකකට attached වෙලා නෑ .ඒ වගේම ආපසු Foreground එකට ගෙන ඒමටත් නොහැක. අපිට මේක කැමතිනම් kill කරන්න පුළුවන්. නැතිනම් දිගටම රන් වෙවී තියන්න පුළුවන්. කමක් නෑ අපි terminate කරල දාමු.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 ~ $
ට්රයි kill 15433
නැවතත් ps -ef|grep 15433 දීල බලමු.nix@Dell ~ $ kill 15433
දැන් අපිට PID එක 15433 වන process එක සොයාගන්න බෑ . ඒකියන්නෙ ඕල් රෙඩි ටෙර්මිනේටඩ් කියල තමයි.nix@Dell ~ $ ps -ef|grep 15433
nix 15496 15435 0 17:55 pts/0 00:00:00 grep --color=auto 15433
nix@Dell ~ $
මම කියල දීපු දේවල් නිතර නිතර කරල බලන්න. හොදේ... අදට පාඩම අවසානයි.
UNIX / Linux මූලික commands පාඩම් මාලාවේ අවසන් පාඩම සමගින් නැවත හමු වෙමු.
ස්තුතියි.
Last edited:



