DevOps_UNIX / Linux_10_UNIX / Linux Process Priorities ගැන ගැබුරින්
අපි අද මුලින්ම කතා කරන්නේ Process Priorities ගැනයි. මෙහිදී මම ඔයාලට මෙන්න මේ කමාන්ඩ්ස් ටික ගැන කරුණු කිහිපයක් කියල දෙන්න බලාපොරොත්තු වෙනව.
කිසියම් process එකක ප්රමුකත්වය අපට වෙනස් කළහැකි පරාසයක් තිබෙනවා. හොදින් මතක තියාගන්න එම පරාසය -20 සිට 19 දක්වා වූ පරාසයක විහිදිලා පවතිනව. අපි shell එකක් මගින් රන් කරන සියලුම process සදහා UNIX / Linux kernel එක මගින් ලබාදෙන පෙරනිමි අගය වන්නේ 0.
අපිට යම්කිසි process එකක් අරම්බ කිරීමට පෙර හිතුනොත් මෙම පෙරනිමි අගය අපිට ප්රමාණවත් නැහැ කියල. අපිට පුළුවන් අපි කැමති ආකාරයට ප්රමුකත්වය ඉහළ දමා හෝ ප්රමුකත්වය පහළ දමා එම process එක ආරම්බ කරන්න.
අපි මේ සදහා nice කියන කමාන්ඩ් එක බාවිතා කරනව, ඉහත සදහන් කල ප්රමුකතා පරාසයෙන් අගයක් (integer value) ගෙන එය nice සමග යෙදීමෙන් තමයි මෙය සිදු කරන්නෙ. අපි මේ අගයට nice value කියලත් කියනව නැතිනම් niceness කියලත් කියනව.
දැන් අපිට මෙහෙමත් හිතන්න පුළුවන් process එකක් ආරම්බ කරනවිට kernel එක මගින් එම process එකට දෙන nice value එක තමයි 0 කියල. ඇත්තටම මේ සිතුවිල්ල හරි.
හොදින් මතක තියාගන්න අපිට nice බාවිතා කල හැක්කේ process එක ආරම්බ කරන අවස්ථාවේ පමණි (මේකත් අපි job interview වලදි අහන ප්රශ්නයක්, මම ඔයාලට මේ වගේ job interview වලදී වැදගත් වන දේවල් වෙනම පාඩමකින් කියල දෙන්න බලා පොරොතු වෙනව. මම මේ කතා කරන්නෙ ලංකාවේ job ගැන නොවේ).
අපි දැන් උදාහරණ සහිතව nice බාවිතා කරන ආකාරය ඉගෙන ගනිමු.
පොඩ්ඩක් ඉන්න මම මුලින්ම කියල දෙන්නම් අපි කොහොමද process එකක nice value එක දන ගන්නෙ කියල. අපි මේ සදහාද බාවිතා කරන්නෙ අපි දැනටමත් දන්න ps කමාන්ඩ් එක.
ට්රයි ps -l හෝ ps -lf
ට්රයි ps -alf
මුලින්ම අපි ping කමාන්ඩ් එකක් background එකේ රන් කරමු.
ට්රයි ping 0 1>/dev/null &
දැන් අපිට ඉගෙන ගන්න පුළුවන් nice බාවිතාකරන ආකාරය . අපි මේකට සරලව කියන්නෙ ප්රොසෙස් එකේ ප්රයෝරිටි එක සෙට් කරනව කියල. තව ඉතා වැදගත් දෙයක් තියෙනව ඔයාලට කියන්න. මේ nice value එකේ සංක්යත්මක අගය වැඩිවෙන විට process එකේ priority එක අඩුවෙනව. ඒ කියන්නෙ අපි process එකකට nice value එකට 19ක් දුන්නොත් process එක නිකම් ලෙඩ කපුටො වැල කනව වගේ තමයි (slow වෙනව). ඒ වගේම -20ක් දුන්නොත් ගැරඩියට භුමි තෙල් ගැහුව වගේ තමයි. බොහොමයක් system processes වල nice value එක -20 වෙනව. ඇයි එහෙම වෙන්නෙ කියල දැන් ඔයාලට තේරුම් ගන්න පුළුවන්.
දැන් කමන්ඩ්ස් ට්රයි කරමු.
ට්රයි nice
අපි දැන් අපේ shell එකේ (bash ෂෙල්) nice value එක 5 කරමු. එකට nice කමාන්ඩ් එකට අපි parameter එකක් විදියට 5 දෙනව . අපි nice ට parameter එකක් දෙනකොට දෙන්නෙ මෙහෙමයි
nice -<parameter>
හොදින් මතක තියාගන්න parameter එකට කලින් අනිව - ලකුණ යොදන්න ඕන බව. parameter එක විදියට ධන 5 යොදන විට nice -5 ලෙසද.
ඍණ 5 ඒ කියන්නේ -5 දෙනවිට මෙලෙසද nice --5 බාවිතා කල යුතුයි. මෙම ක්රමය පැටළිලි සහිත නම්. මම තවත් පහසු ක්රමයක් උදාහරණ වලදී පෙන්වන්නම්.
ට්රයි nice -5 bash හෝ nice -n 5 bash
දැන් ට්රයි nice
අපි මේ විදියට අපේ shell එකේ nice value එක වෙනස් කලොත්, එම shell එක මගින් ආරම්බ කරන සියලුම කමන්ඩ්ස් වල nice value එකත් shell එකේ nice value එකට සමානයි. ඒ කියන්නෙ අපේ shell එක රන් වන priority එකෙන්ම අපි දුන්න කමන්ඩ්ස් ටිකත් රන් වෙනව කියල.
අපේ current shell එකේම මේකත් ට්රයි කරමු.
ට්රයි ping 0 1>/dev/null &
ට්රයි ps -lf -C "ping"
මෙම කරුණත් හොදින් මතක තියාගන්න. මේ වගේ කරුණු ඔයාලට පහසුවෙන් යම් පටමලාවක් කරල ඉගෙන ගන්න අමාරුයි. මොකද මම මෙහෙම කියන්නෙ මගේ අත් දැකීමෙන්. කනගාටුවට කරුනකුත් තියෙනවා. අපේ රජයේ උසස් අධ්යාපන ආයතනවල ඉගැන්වීම් කටයුතු කරන බොහොමයක් දෙනාහට ඇත්තේ අවම ප්රයෝගික දැනුමක්. නමුත් එයාල ටයි එකටයි කෝට් එකටයි මාර හැන්ඩ්සම් පොරවල්.
අපි මේ background එකේ රන් වෙන PID 7451 වන ping කමාන්ඩ් එක අපි kill කරමු. අනතුරුව exit කමාන්ඩ් එක ටයිප් කරල අපේ current shell එකෙන් ඉවත් වෙමු.
ට්රයි kill 7451
දැන් අනෙක් විදියත් ඉගෙන ගනිමු. අපි මෙහිදී කෙලින්ම අපේ කමාන්ඩ් එකට nice value එක සෙට් කරනවා. හරියට අපි මුලින්ම bash shell එකට කළා වගේ.
ට්රයි nice -n 10 ping 0 1>/dev/null & හෝ nice -10 ping 0 1>/dev/null &
ට්රයි ps -lf -C "ping"
දැන් අපි ping කියන process එක kill කරමු.
ට්රයි kill 8946
ට්රයි nice -n -10 ping 0 1>/dev/null &
මොකද හැමෝටම එහෙම priority එක වැඩි කරගන්න පුළුවන් වුනොත් දන්නවා නේ වෙනදේ. - අගයක් කියන්නෙ කඩාගෙන බිදගෙන යන යකා වගේ රන් වෙනව කියන එකයි. ඒ විදියට processes කිහිපයක් රන් වුනොත් සිස්ටම් එකේ ඉන්න අහිංසක පොරවල් වලට සොරි තමා. මොකද එයාලගෙ processes ටිකට ලැබෙන්නෙ අඩු resources ටිකක් නිසා.
මෙහිදී nice value එක සෙට් කරන්න බැරිවුනාට ping කමාන්ඩ් එක රන් වෙනව නමුත් nice value එක 0 යි.
අපිට ඒක චෙක් කරල බලන්න පුළුවන් .
ට්රයි ps -lf -C "ping"
ට්රයි kill 9067
දැන් අපි root පර්මිෂන් අරගෙන කලින් ට්රයි කරපු කමාන්ඩ් එකම ට්රයි කරමු.
ට්රයි sudo -s
ට්රයි nice -n -10 ping 0 1>/dev/null &
ට්රයි ps -lf -C "ping"
ට්රයි kill 9444
ට්රයි exit
අපි මේ විදියට root ගෙ පර්මිෂන් අරගෙන කමාන්ඩ් එකක් රන් කරන එක එතරම් හොද දෙයක් නෙවි. මොකද මෙම process එක රන් වෙන්නෙ root යටතෙ නිසා. සිකුරිටි රිස්ක් එකක් තියෙනව.
හොදම විදිය තාම කමාන්ඩ් එක නොර්මල් user ගෙන් රන් කරල පස්සේ එකේ nice value එක වෙනස් කිරීම.
හොදින් මතක තියාගන්න nice කමාන්ඩ් එක මගින් අපිට ආරම්බ කරන ලද කමාන්ඩ් එකක් nice value එක වෙනස් කරන්න බෑ කියල. අපිට ඒ සදහා renice කියන කමාන්ඩ් එක යොදාගන්න පුළුවන්. අපි ඊළගට බලමු කොහොමද මේ renice බාවිතා කරන්නෙ කියලා.
අපි මුලින්ම බලමු renice මගින් nice value එක ධන අගයකට සෙට් කරන ආකාරය.
අපි මුලින්ම නොර්මල් විදියට කමාන්ඩ් එකක් රන් කරමු මේ විදියට.
ට්රයි sudo renice 10 10305
ට්රයි ps -lf -C "ping"
ට්රයි sudo renice 0 10305
ට්රයි sudo renice -5 10305
ට්රයි sudo renice 0 10305
ඉහත උදාහරණ වලදී මම renice සමග යොදාගත්තේ PID එකයි.
අපිට renice මගින් කිසියම් user කෙනෙක් රන් කරපු සියලුම processes වල nice value එක එක් වරම වෙනස් කිරීමට වුවද පුළුවන්. අපි දැන් එය සිදු කරන ආකාරය බලමු. මෙම මේ සදහා අලුතෙන් terminal එකක් open කරල. මගේ සිස්ටම් එකේ ඉන්න වෙනත් user කෙනෙකුගෙන් ලොග් වී processes කිහිපයක් රන් කරලා වැඩේ පටන් ගනිමු.
ට්රයි sudo renice 13 -u minix
මම දැන් minix ආරම්බ කරපු සියලුම processes ටික මෙන්න මේ විදියට kill කරල දානව.
ට්රයි sudo pkill -u minix
අපිට චෙක් කරල බලන්න පුළුවන් සේරම processes ටික killed ද කියල.
ට්රයි ps -u minix
මම අද පාඩම අවසන් කරන්න කලින් හොද උදාහරණයකින් පෙන්වන්නම් process එකේ priority එක nice value එක අනුව අඩු වැඩි වෙන ආකාරය. ඔයාල මේක තේරුම් ගන්න උත්සහ කරන්න. අපිට මේ උදාහරණ කිහිපය සදහා එකම පරීක්ෂණ තත්ව පවත්වා ගැනීමට ඕන නිසා තාවකාලිකව root පර්මිෂන් එක අරගෙන වැඩේ කරමු.
ට්රයි sudo -s
අපි දැන් ට්රයි කරමු nice value -20 සමග (priority එක වැඩි)
ට්රයි time nice -n -20 seq 100000000000 1>/dev/null
අපි දැන් ට්රයි කරමු nice value 19 සමග (priority එක අඩු)ට්රයි time nice -n 19 seq 100000000000 1>/dev/null
මේ තියෙන්නේ මම ටෙස්ට් එක කරන අතරේ ලබාගත් ps -lf -C "seq" කමාන්ඩ් එකේ outputs
මම දැන් සුදානම් වෙන්නේ time කමාන්ඩ් එකෙන් ලැබුන result එකේ තිබෙන real, user සහ sys කියන දේ ගැන පොඩි පැහැදිලි කිරීමක් කරන්න. (මෙය ටිකක් සංකීර්ණ දෙයක්)
දැනට ඔයාල මෙන්න මේ විදියට සරලව තේරුම් ගන්න බලන්න. ඉදිරියේදී අපි scripting language බාවිතා කරලා සෙල්ලම් කරන කොට මම මේ ගැන ගැබුරින් පැහැදිලි කරන්නම්. මේ වගේ දේවල් ප්රයෝගික උදාහරණ මගින් තේරුම් ගන්න එක ඉතා පහසුයි.
දැනට මේ විදියට මතක තියා ගන්න.
real - මේ කියන්නේ කමාන්ඩ් එක රන් කරපු වෙලාවේ ඉදන් අවසන් වෙනකම් ගතවූ කාලය. හරියට අපේ සුසන්තිකා අක්ක go කියනකොට දුවන පටන් ගන්න කොට stopwatch එක start කරලා අවසන් සිමාව පසු කරනකොට එකේ stop එක එබුවම පෙන්නන කාලය වගේ දෙයක්.
user - මේකෙන් කියන්නෙ use කරපු CPU time එක. (උදහරණ :- ගණනය කිරීම් වලට)
sys - මගින් නිරුපනය කරන්නෙ කමාන්ඩ් එක execute කරන්න UNIX / Linux kernel එකට ගතවූ කාලය.
UNIX / Linux මූලික කමාන්ඩ්ස් හි අවසන් පාඩමෙන් නැවත හමුවෙමු.
ස්තුතියි!
මුලින් මම සැලසුම් කරගෙන හිටියෙ අදින් අපේ UNIX / Linux මුලික කමාන්ඩ්ස් පාඩම අවසන් කරන්න. නමුත් අපේ රටේ දැනට සිස් ඇඩ්මින්ල විදියට සේවය කරනකිහිප දෙනෙකුගෙ ඉල්ලීමක් මත UNIX / Linux Process Priorities ගැන දීර්ග විස්තරයක් අද පාඩමෙන් කථාකරන්න හිතුව. අපි අද මුලින්ම කතා කරන්නේ Process Priorities ගැනයි. මෙහිදී මම ඔයාලට මෙන්න මේ කමාන්ඩ්ස් ටික ගැන කරුණු කිහිපයක් කියල දෙන්න බලාපොරොත්තු වෙනව.
- nice
- renice
- time
කිසියම් process එකක ප්රමුකත්වය අපට වෙනස් කළහැකි පරාසයක් තිබෙනවා. හොදින් මතක තියාගන්න එම පරාසය -20 සිට 19 දක්වා වූ පරාසයක විහිදිලා පවතිනව. අපි shell එකක් මගින් රන් කරන සියලුම process සදහා UNIX / Linux kernel එක මගින් ලබාදෙන පෙරනිමි අගය වන්නේ 0.
අපිට යම්කිසි process එකක් අරම්බ කිරීමට පෙර හිතුනොත් මෙම පෙරනිමි අගය අපිට ප්රමාණවත් නැහැ කියල. අපිට පුළුවන් අපි කැමති ආකාරයට ප්රමුකත්වය ඉහළ දමා හෝ ප්රමුකත්වය පහළ දමා එම process එක ආරම්බ කරන්න.
අපි මේ සදහා nice කියන කමාන්ඩ් එක බාවිතා කරනව, ඉහත සදහන් කල ප්රමුකතා පරාසයෙන් අගයක් (integer value) ගෙන එය nice සමග යෙදීමෙන් තමයි මෙය සිදු කරන්නෙ. අපි මේ අගයට nice value කියලත් කියනව නැතිනම් niceness කියලත් කියනව.
දැන් අපිට මෙහෙමත් හිතන්න පුළුවන් process එකක් ආරම්බ කරනවිට kernel එක මගින් එම process එකට දෙන nice value එක තමයි 0 කියල. ඇත්තටම මේ සිතුවිල්ල හරි.
හොදින් මතක තියාගන්න අපිට nice බාවිතා කල හැක්කේ process එක ආරම්බ කරන අවස්ථාවේ පමණි (මේකත් අපි job interview වලදි අහන ප්රශ්නයක්, මම ඔයාලට මේ වගේ job interview වලදී වැදගත් වන දේවල් වෙනම පාඩමකින් කියල දෙන්න බලා පොරොතු වෙනව. මම මේ කතා කරන්නෙ ලංකාවේ job ගැන නොවේ).
අපි දැන් උදාහරණ සහිතව nice බාවිතා කරන ආකාරය ඉගෙන ගනිමු.
පොඩ්ඩක් ඉන්න මම මුලින්ම කියල දෙන්නම් අපි කොහොමද process එකක nice value එක දන ගන්නෙ කියල. අපි මේ සදහාද බාවිතා කරන්නෙ අපි දැනටමත් දන්න ps කමාන්ඩ් එක.
ට්රයි ps -l හෝ ps -lf
nix@Dell ~ $ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 2575 2481 0 80 0 - 6184 wait pts/0 00:00:00 bash
4 R 1000 10287 2575 0 80 0 - 7742 - pts/0 00:00:00 ps
nix@Dell ~ $
ඔයාල හොදට බලන්න "NI" කියල කොලම් එකක් තියෙනවද කියල. අන්න ඒ කොලම් එකේ තමයි nice value එක සටහන් වෙලා තියෙන්නෙ. අපිට මෙම කමාන්ඩ් එකෙන් ගන්න පුළුවන් අපේ terminal එකේ තියෙන current shell එකෙන් රන් කරපු processes වල ලැයිස්තුවක්. අපිට අනිත් terminal වලින් රන් කරපු processes ටිකත් බලාගන්න ඕන නම් ps සමග a ඔප්ෂන් එක යොදන්න.nix@Dell ~ $ ps -lf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S nix 2604 2385 0 80 0 - 6182 wait 14:03 pts/0 00:00:00 /bin/bash
4 R nix 4663 2604 0 80 0 - 9854 - 14:12 pts/0 00:00:00 ps -lf
nix@Dell ~ $
ට්රයි ps -alf
අපිට එක විශේෂිත process එකක විස්තර විතරක් දන ගන්න ඕන නමේ C ඔප්ෂන් එක යොදාගෙන මෙන්න මේ විදියට බාවිතා කරන්න පුළුවන්. අපි උදාහරණයකින් ම ඒක කරලා බලමු.nix@Dell ~ $ ps -alf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 4592 4577 0 80 0 - 2146 - 14:08 pts/2 00:00:00 ping 0
4 R nix 5433 2604 0 80 0 - 9854 - 14:14 pts/0 00:00:00 ps -alf
nix@Dell ~ $
මුලින්ම අපි ping කමාන්ඩ් එකක් background එකේ රන් කරමු.
ට්රයි ping 0 1>/dev/null &
දැන් අපි ට්රයි ps -lf -C "ping" කරල බලමු.nix@Dell ~ $ ping 0 1>/dev/null &
[1] 5526
nix@Dell ~ $
මම ඔයාලට කලිනුත් කිව්ව මතක ද මේ ps කමාන්ඩ් එක බාවිතාකරන ආකාර ගොඩක් තියෙනව. මේ විදියට අපි එකෙන් එක ඉගෙන ගන්න බලමු. දැන් අපි දන්නව nice value එක බලාගන්න ආකාරය.nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 5526 5499 0 80 0 - 2146 - 14:19 pts/0 00:00:00 ping 0
nix@Dell ~ $
දැන් අපිට ඉගෙන ගන්න පුළුවන් nice බාවිතාකරන ආකාරය . අපි මේකට සරලව කියන්නෙ ප්රොසෙස් එකේ ප්රයෝරිටි එක සෙට් කරනව කියල. තව ඉතා වැදගත් දෙයක් තියෙනව ඔයාලට කියන්න. මේ nice value එකේ සංක්යත්මක අගය වැඩිවෙන විට process එකේ priority එක අඩුවෙනව. ඒ කියන්නෙ අපි process එකකට nice value එකට 19ක් දුන්නොත් process එක නිකම් ලෙඩ කපුටො වැල කනව වගේ තමයි (slow වෙනව). ඒ වගේම -20ක් දුන්නොත් ගැරඩියට භුමි තෙල් ගැහුව වගේ තමයි. බොහොමයක් system processes වල nice value එක -20 වෙනව. ඇයි එහෙම වෙන්නෙ කියල දැන් ඔයාලට තේරුම් ගන්න පුළුවන්.
දැන් කමන්ඩ්ස් ට්රයි කරමු.
ට්රයි nice
අපිට nice කමාන්ඩ් එක විතරක් දීල (options නොමැතිව) දැන ගන්න පුළුවන් අපේ current shell එක රන් වෙන nice value එක.nix@Dell ~ $ nice
0
nix@Dell ~ $
අපි දැන් අපේ shell එකේ (bash ෂෙල්) nice value එක 5 කරමු. එකට nice කමාන්ඩ් එකට අපි parameter එකක් විදියට 5 දෙනව . අපි nice ට parameter එකක් දෙනකොට දෙන්නෙ මෙහෙමයි
nice -<parameter>
හොදින් මතක තියාගන්න parameter එකට කලින් අනිව - ලකුණ යොදන්න ඕන බව. parameter එක විදියට ධන 5 යොදන විට nice -5 ලෙසද.
ඍණ 5 ඒ කියන්නේ -5 දෙනවිට මෙලෙසද nice --5 බාවිතා කල යුතුයි. මෙම ක්රමය පැටළිලි සහිත නම්. මම තවත් පහසු ක්රමයක් උදාහරණ වලදී පෙන්වන්නම්.
ට්රයි nice -5 bash හෝ nice -n 5 bash
මෙහිදී අපි කරේ අපේ current shell එකේ nice value එක 5 කරා. කලින් තිබුනෙ 0. දැන් 5. අපි චෙක් කරලා බලමු. (මම මෙතන current shell එකේ කියල කිව්වට ඇත්තම කතාව නම් කමාන්ඩ් එක ටයිප් කරනවිට පවතින current shell එක මගින් නව shell එකක් ආරම්බ වෙනව එම shell එක තමා අපිට terminal එකේ කමාන්ඩ් එකෙන් පසුව current shell එක විදියට පේන්න තියෙන්නෙ. අන්න ඒ අන්තිමට පෙන්න තියෙන shell එකේ nice value එක තමා 5 වෙන්නෙ)nix@Dell ~ $ nice -5 bash
nix@Dell ~ $
දැන් ට්රයි nice
මේ විදියටත් චෙච්ක් කරලා බලමු.nix@Dell ~ $ nice
5
nix@Dell ~ $
බලන්න PID 7400 කියන bash shell NI අගය 5 නේද කියල.nix@Dell ~ $ ps -lf -C "bash"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S nix 4498 4491 0 80 0 - 6182 wait_w 14:07 pts/1 00:00:00 /bin/bash
0 S nix 7327 2385 0 80 0 - 6184 wait 16:02 pts/2 00:00:00 /bin/bash
0 S nix 7400 7327 0 85 5 - 6182 wait 16:04 pts/2 00:00:00 bash
nix@Dell ~ $
අපි මේ විදියට අපේ shell එකේ nice value එක වෙනස් කලොත්, එම shell එක මගින් ආරම්බ කරන සියලුම කමන්ඩ්ස් වල nice value එකත් shell එකේ nice value එකට සමානයි. ඒ කියන්නෙ අපේ shell එක රන් වන priority එකෙන්ම අපි දුන්න කමන්ඩ්ස් ටිකත් රන් වෙනව කියල.
අපේ current shell එකේම මේකත් ට්රයි කරමු.
ට්රයි ping 0 1>/dev/null &
දැන් බලමු ping එකේ NI එක කියාද කියල.nix@Dell ~ $ ping 0 1>/dev/null &
[1] 7451
nix@Dell ~ $
ට්රයි ps -lf -C "ping"
දැක්ක නේද NI එක 5යි. අපේ shell එකේ ගනනමයි.nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 7451 7400 0 85 5 - 2146 - 16:07 pts/2 00:00:00 ping 0
nix@Dell ~ $
මෙම කරුණත් හොදින් මතක තියාගන්න. මේ වගේ කරුණු ඔයාලට පහසුවෙන් යම් පටමලාවක් කරල ඉගෙන ගන්න අමාරුයි. මොකද මම මෙහෙම කියන්නෙ මගේ අත් දැකීමෙන්. කනගාටුවට කරුනකුත් තියෙනවා. අපේ රජයේ උසස් අධ්යාපන ආයතනවල ඉගැන්වීම් කටයුතු කරන බොහොමයක් දෙනාහට ඇත්තේ අවම ප්රයෝගික දැනුමක්. නමුත් එයාල ටයි එකටයි කෝට් එකටයි මාර හැන්ඩ්සම් පොරවල්.
අපි මේ background එකේ රන් වෙන PID 7451 වන ping කමාන්ඩ් එක අපි kill කරමු. අනතුරුව exit කමාන්ඩ් එක ටයිප් කරල අපේ current shell එකෙන් ඉවත් වෙමු.
ට්රයි kill 7451
ට්රයි exitnix@Dell ~ $ kill 7451
nix@Dell ~ $ jobs -l
[1]+ 7451 Terminated ping 0 > /dev/null
nix@Dell ~ $
දැන් අපි ඉන්න shell එකේ NI එක 0 යි. මේ බලන්නnix@Dell ~ $ exit
exit
nix@Dell ~ $
දැන් අපි දන්නවා nice value එක සෙට් කරන එක විදියක්.nix@Dell ~ $ nice
0
nix@Dell ~ $
දැන් අනෙක් විදියත් ඉගෙන ගනිමු. අපි මෙහිදී කෙලින්ම අපේ කමාන්ඩ් එකට nice value එක සෙට් කරනවා. හරියට අපි මුලින්ම bash shell එකට කළා වගේ.
ට්රයි nice -n 10 ping 0 1>/dev/null & හෝ nice -10 ping 0 1>/dev/null &
nix@Dell ~ $ nice -n 10 ping 0 1>/dev/null &
[1] 8946
nix@Dell ~ $
ට්රයි ps -lf -C "ping"
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 8946 8856 0 90 10 - 2146 - 16:40 pts/2 00:00:00 ping 0
nix@Dell ~ $
දැන් අපි ping කියන process එක kill කරමු.
ට්රයි kill 8946
දැන් අපි බලමු nice value එකට ඍණ අගයක් දීල. (- අගයක් දුන්න විට process එකේ priority එක වැඩි වෙනව, ඒ වගේම වැඩිපුර resources එහෙමත් use කරනව)nix@Dell ~ $ kill 8946
nix@Dell ~ $
ට්රයි nice -n -10 ping 0 1>/dev/null &
හ්ම් එපාර අපිට nice value එක සෙට් කරන්න බැරිය කියල කියන්නේ. මොකක්ද දන්නවද මේ කියන්නෙ. nice value එකට ඍන (-) අගයක් සෙට් කරන්න පුළුවන් root ට විතරයි කියන එක.nix@Dell ~ $ nice -n -10 ping 0 1>/dev/null &
[1] 9067
nix@Dell ~ $ nice: cannot set niceness: Permission denied
nix@Dell ~ $
මොකද හැමෝටම එහෙම priority එක වැඩි කරගන්න පුළුවන් වුනොත් දන්නවා නේ වෙනදේ. - අගයක් කියන්නෙ කඩාගෙන බිදගෙන යන යකා වගේ රන් වෙනව කියන එකයි. ඒ විදියට processes කිහිපයක් රන් වුනොත් සිස්ටම් එකේ ඉන්න අහිංසක පොරවල් වලට සොරි තමා. මොකද එයාලගෙ processes ටිකට ලැබෙන්නෙ අඩු resources ටිකක් නිසා.
මෙහිදී nice value එක සෙට් කරන්න බැරිවුනාට ping කමාන්ඩ් එක රන් වෙනව නමුත් nice value එක 0 යි.
අපිට ඒක චෙක් කරල බලන්න පුළුවන් .
ට්රයි ps -lf -C "ping"
අන්තිමට ping කමාන්ඩ් එක මේ විදියට kill කරන්නnix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 9067 9051 0 80 0 - 2146 - 16:50 pts/0 00:00:00 ping 0
nix@Dell ~ $
ට්රයි kill 9067
දැන් අපි root පර්මිෂන් අරගෙන කලින් ට්රයි කරපු කමාන්ඩ් එකම ට්රයි කරමු.
ට්රයි sudo -s
nix@Dell ~ $ sudo -s
[sudo] password for nix:
Dell ~ #
ට්රයි nice -n -10 ping 0 1>/dev/null &
දැන් චෙක් කරල බලමු.Dell ~ # nice -n -10 ping 0 1>/dev/null &
[1] 9444
Dell ~ #
ට්රයි ps -lf -C "ping"
අන්තිමට ping එක kill කරල දාල (තියාගෙන හිටියට වැඩක් නෑනෙ) root පර්මිෂන් එකෙන් exit වෙමු.Dell ~ # ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 9444 9430 0 70 -10 - 2146 skb_re 17:09 pts/0 00:00:00 ping 0
Dell ~ #
ට්රයි kill 9444
Dell ~ # kill 9444
Dell ~ #
ට්රයි exit
Dell ~ # exit
exit
nix@Dell ~ $
අපි මේ විදියට root ගෙ පර්මිෂන් අරගෙන කමාන්ඩ් එකක් රන් කරන එක එතරම් හොද දෙයක් නෙවි. මොකද මෙම process එක රන් වෙන්නෙ root යටතෙ නිසා. සිකුරිටි රිස්ක් එකක් තියෙනව.
හොදම විදිය තාම කමාන්ඩ් එක නොර්මල් user ගෙන් රන් කරල පස්සේ එකේ nice value එක වෙනස් කිරීම.
හොදින් මතක තියාගන්න nice කමාන්ඩ් එක මගින් අපිට ආරම්බ කරන ලද කමාන්ඩ් එකක් nice value එක වෙනස් කරන්න බෑ කියල. අපිට ඒ සදහා renice කියන කමාන්ඩ් එක යොදාගන්න පුළුවන්. අපි ඊළගට බලමු කොහොමද මේ renice බාවිතා කරන්නෙ කියලා.
අපි මුලින්ම බලමු renice මගින් nice value එක ධන අගයකට සෙට් කරන ආකාරය.
අපි මුලින්ම නොර්මල් විදියට කමාන්ඩ් එකක් රන් කරමු මේ විදියට.
දැන් renice බාවිතා කරමු.nix@Dell ~ $ ping 0 1>/dev/null &
[1] 10305
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 10305 10290 0 80 0 - 2146 - 18:04 pts/0 00:00:00 ping 0
nix@Dell ~ $
ට්රයි sudo renice 10 10305
nix@Dell ~ $ sudo renice 10 10305
[sudo] password for nix:
10305 (process ID) old priority 0, new priority 10
nix@Dell ~ $
ට්රයි ps -lf -C "ping"
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 10305 10290 0 90 10 - 2146 - 18:04 pts/0 00:00:00 ping 0
nix@Dell ~ $
ට්රයි sudo renice 0 10305
nix@Dell ~ $ sudo renice 0 10305
10305 (process ID) old priority 10, new priority 0
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 10305 10290 0 80 0 - 2146 - 18:04 pts/0 00:00:00 ping 0
nix@Dell ~ $
ට්රයි sudo renice -5 10305
නැවතත් nice value එක 0 කරමු.nix@Dell ~ $ sudo renice -5 10305
10305 (process ID) old priority 0, new priority -5
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 10305 10290 0 75 -5 - 2146 - 18:04 pts/0 00:00:00 ping 0
nix@Dell ~ $
ට්රයි sudo renice 0 10305
අපිට මෙම ක්රමයෙන් නෝමල් user කෙනෙක් ගෙ process එකක priority එක වැඩි කරන්න පුළුවන් (nice value එක අඩු කිරීම) root පර්මිෂන් නොමැතිව කමාන්ඩ් එක රන් කරල.nix@Dell ~ $ sudo renice 0 1030510305 (process ID) old priority -5, new priority 0
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S nix 10305 10290 0 80 0 - 2146 - 18:04 pts/0 00:00:00 ping 0
nix@Dell ~ $ kill 10305nix@Dell ~ $
ඉහත උදාහරණ වලදී මම renice සමග යොදාගත්තේ PID එකයි.
අපිට renice මගින් කිසියම් user කෙනෙක් රන් කරපු සියලුම processes වල nice value එක එක් වරම වෙනස් කිරීමට වුවද පුළුවන්. අපි දැන් එය සිදු කරන ආකාරය බලමු. මෙම මේ සදහා අලුතෙන් terminal එකක් open කරල. මගේ සිස්ටම් එකේ ඉන්න වෙනත් user කෙනෙකුගෙන් ලොග් වී processes කිහිපයක් රන් කරලා වැඩේ පටන් ගනිමු.
මම ආපසු මගේ පරණ terminal එකට ගිහිල්ල මේ ටික කරනව .nix@Dell ~ $ su -l minix
Password:
minix@Dell ~ $ ping 0 1>/dev/null &
[1] 11433
minix@Dell ~ $ ping 0 1>/dev/null &
[2] 11435
minix@Dell ~ $ ping 0 1>/dev/null &
[3] 11436
minix@Dell ~ $ ping 0 1>/dev/null &
[4] 11437
minix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S minix 11433 11409 0 80 0 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11435 11409 0 80 0 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11436 11409 0 80 0 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11437 11409 0 80 0 - 2146 - 18:22 pts/3 00:00:00 ping 0
minix@Dell ~ $
ට්රයි sudo renice 13 -u minix
දැක්ක නේද වෙලා තියන දේ. දැන් ඔයාලට පැහැදිලියි වැඩේ කොහොමද කරන්නෙ කියල.nix@Dell ~ $ sudo renice 13 -u minix
1003 (user ID) old priority 0, new priority 13
nix@Dell ~ $ ps -lf -C "ping"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S minix 11433 11409 0 93 13 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11435 11409 0 93 13 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11436 11409 0 93 13 - 2146 - 18:22 pts/3 00:00:00 ping 0
4 S minix 11437 11409 0 93 13 - 2146 - 18:22 pts/3 00:00:00 ping 0
nix@Dell ~ $
මම දැන් minix ආරම්බ කරපු සියලුම processes ටික මෙන්න මේ විදියට kill කරල දානව.
ට්රයි sudo pkill -u minix
nix@Dell ~ $ sudo pkill -u minix
[sudo] password for nix:
nix@Dell ~ $
අපිට චෙක් කරල බලන්න පුළුවන් සේරම processes ටික killed ද කියල.
ට්රයි ps -u minix
හරි minix ගෙ කිසිම දෙයක් ඉතිරිවෙලා නෑ.nix@Dell ~ $ ps -u minix
PID TTY TIME CMD
nix@Dell ~ $
මම අද පාඩම අවසන් කරන්න කලින් හොද උදාහරණයකින් පෙන්වන්නම් process එකේ priority එක nice value එක අනුව අඩු වැඩි වෙන ආකාරය. ඔයාල මේක තේරුම් ගන්න උත්සහ කරන්න. අපිට මේ උදාහරණ කිහිපය සදහා එකම පරීක්ෂණ තත්ව පවත්වා ගැනීමට ඕන නිසා තාවකාලිකව root පර්මිෂන් එක අරගෙන වැඩේ කරමු.
ට්රයි sudo -s
nix@Dell ~ $ sudo -s
[sudo] password for nix:
Dell ~ #
අපි දැන් ට්රයි කරමු nice value -20 සමග (priority එක වැඩි)
ට්රයි time nice -n -20 seq 100000000000 1>/dev/null
Dell ~ # time nice -n -20 seq 100000000000 1>/dev/null
real 12m11.974s
user 11m52.584s
sys 0m19.320s
අපි දැන් ට්රයි කරමු nice value 19 සමග (priority එක අඩු)ට්රයි time nice -n 19 seq 100000000000 1>/dev/null
මේ ප්රතිපල දෙක දිහා බැලුවම ඔයාලට පේනවා NI එක -20 විට ගතවූ කාලය 19 ට සාපේක්ෂව අඩු බව.Dell ~ # time nice -n 19 seq 100000000000 1>/dev/null
real 12m15.524s
user 11m55.300s
sys 0m20.036s
මේ තියෙන්නේ මම ටෙස්ට් එක කරන අතරේ ලබාගත් ps -lf -C "seq" කමාන්ඩ් එකේ outputs
nix@Dell ~ $ ps -lf -C "seq"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 R root 12737 11768 99 60 -20 - 2340 - 19:50 pts/0 00:09:16 seq 100000000000
nix@Dell ~ $
nix@Dell ~ $ nix@Dell ~ $ ps -lf -C "seq"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 R root 12834 11768 99 99 19 - 2340 - 20:03 pts/0 00:00:04 seq 100000000000
nix@Dell ~ $
මම දැන් සුදානම් වෙන්නේ time කමාන්ඩ් එකෙන් ලැබුන result එකේ තිබෙන real, user සහ sys කියන දේ ගැන පොඩි පැහැදිලි කිරීමක් කරන්න. (මෙය ටිකක් සංකීර්ණ දෙයක්)
දැනට ඔයාල මෙන්න මේ විදියට සරලව තේරුම් ගන්න බලන්න. ඉදිරියේදී අපි scripting language බාවිතා කරලා සෙල්ලම් කරන කොට මම මේ ගැන ගැබුරින් පැහැදිලි කරන්නම්. මේ වගේ දේවල් ප්රයෝගික උදාහරණ මගින් තේරුම් ගන්න එක ඉතා පහසුයි.
දැනට මේ විදියට මතක තියා ගන්න.
real - මේ කියන්නේ කමාන්ඩ් එක රන් කරපු වෙලාවේ ඉදන් අවසන් වෙනකම් ගතවූ කාලය. හරියට අපේ සුසන්තිකා අක්ක go කියනකොට දුවන පටන් ගන්න කොට stopwatch එක start කරලා අවසන් සිමාව පසු කරනකොට එකේ stop එක එබුවම පෙන්නන කාලය වගේ දෙයක්.
user - මේකෙන් කියන්නෙ use කරපු CPU time එක. (උදහරණ :- ගණනය කිරීම් වලට)
sys - මගින් නිරුපනය කරන්නෙ කමාන්ඩ් එක execute කරන්න UNIX / Linux kernel එකට ගතවූ කාලය.
UNIX / Linux මූලික කමාන්ඩ්ස් හි අවසන් පාඩමෙන් නැවත හමුවෙමු.
ස්තුතියි!
Last edited:


