process ໃນ Linux

ຄວາມຫມາຍຂອງ process ງ່າຍ ໆ ກໍຄື “ໂປແກມທີ່ກຳລັງເຮັດວຽກຢູ່” ຫລືຈະອະທິບາຍໃຈຄວາມໃຫ້ເລິກລົງໄປອີກກໍຄື “ໂປແກມທີ່ກຳລັງເຮັດວຽກໃນແອດເດສ ນັ້ນ ທີ່ກິນຊັບພະຍາກອນຂອງເຄື່ອງຄືກັນ” ເອົ້າ… ອັນນີ້ອະທິບາຍແບບບໍ່ໄດ້ອ້າງອິງພາສາວິຊາການຫຍັງຫລາຍ ໃນລະບົບ multitasking ຢ່າງພວກ linux ນີ້ ໂປແກມເຮົາສາມາດສັ່ງລັນໄດ້ຫລາຍ ໆ ເທື່ອໃນເວລາດຽວກັນ ເຖິງແມ່ນຈະເປັນໂປແກມຄົນລະຕົວກໍຕາມເຖິງ ໂປແກມທີ່ລັນແຕ່ລະເທື່ອໆນັ້ນ ແມ່ນຈະເປັນຕົວດຽວກັນກໍເອີ້ນວ່າໂປເຊດ ແລະເມື່ອເບີ່ງມາຍັງລະບົບທີ່ເຮັດວຽກແບບ multiuser ຢ່າງເຊັ່ນ UNIX ຫລື Linux ນີ້ ເຮົາສາມາດເຂົ້າມາໃຊ້ງານລະບົບໄດ້ພ້ອມໆກັນຫລາຍໆຄົນບໍ່ໄດ້ລວມ XP ຫລື OS ທີ່ເຮັດວຽກແບບຄົນດຽວເດີ້ນິ ການເຮັດວຽກງານເຂົ້າມາພ້ອມໆ ກັນຫລາຍຄົນຈາກ network ເຊັ່ນ ຍິງເຂົ້າມາເພື່ອ telnet ລະບົບນັ້ນ ແລະເອີ້ນໃຊ້ໂປແກມຫລືຊັບພະຍາກອນຈາກລະບົບນັ້ນເຊັ່ນ ເຮົາຢູ່ໃນ network ທີ່ມີ UNIX ຢູ່ ເຮົາກໍ telnet ເຂົ້າມາໃຊ້ໂປແກມກວດເຊັກ email ທີ່ຢູ່ໃນ Linux ຊຶ່ງເປັນໂປແກມດຽວກັນກັບທີ່ອີກຄົນໜຶ່ງທີ່ກຳລັງ login ຢູ່ໃຊ້ງານຢູ່ຄືກັນນັ້ນເອງ ນັ້ນສະແດງວ່າໂປແກມດຽວກັນ ແຕ່ເຮັດວຽກກັນຄົນລະ process ນັ້ນເອງ

ໂຄງສ້າງຂອງ process ນີ້ ຈະຂຽນງ່າຍ ໆ ກໍຄື… ຍົກຕົວຢ່າງຄົນສອງຄົນເຂົ້າມາ login ຢູ່ໃນ Linux ພ້ອມ ໆ ກັນ ແລະໃຊ້ໂປແກມດຽວກັນ ເຊັ່ນ mail, ping ຫລືໂປແກມອີເມລ໌ pine ພວກເຂົາກໍຈະເອີ້ນໃຊ້ໂປແກມດຽວກັນ

[ubuntu $ ] mail kubuntu@gmail.com

[sni77er $ ] mail dev@gmail.com

ແບບນີ້ ໂປແກມ mail ກໍຈະຖືກໂຫລດຈາກດິກ໌ແລະເຂົ້າໄປຢູ່ໃນຫນ່ວຍຄວາມຈຳເມື່ອມັນຖືກໂຫລດເຂົ້າໄປແລ້ວ ມັນກໍຈະຢູ່ຄົນລະຕຳແໜ່ງ ຫລືຄົນລະprocess ແຕ່ຂໍ້ມູນທີ່ໃຊ້ສຳລັບໂປແກມນັ້ນກໍຈະຕ່າງກັນອອກໄປ ເຊັ່ນ os ເຮັດວຽກກັບຂໍ້ມູນຄື kubuntu@gmail.com ນັ້ນກໍຢູ່ໃນprocessຂອງພວກເຂົາ ເປັນຂໍ້ມູນທີ່ຢູ່ໃນບະບລັອກຂອງພວກເຂົາ ຢູ່ໃນprocess ທີ່ເປັນໂປແກມຂອງພວກເຂົາທີ່ພວກເຂົາເອີ້ນຂຶ້ນມາເອງ… ສ່ວນ dev ກໍຈະມີອີເມລ໌ dev@gmail.com ທີ່ເປັນຂໍ້ມູນທີ່ຕ່າງກັນ ແຕ່ເປັນຂໍ້ມູນທີ່ເກັບຢູ່ໃນຕົວແປຕົວດຽວກັນໃນໂປແກມທີ່ຊື່ວ່າ mail. ພໍເບີ່ງອອກລະເນາະ ໃນການຂຽນໂປຣແກຣມພາສາ C/C++ ມັນຈະຕ້ອງມີການເກັບຂໍ້ມູນຕົວແປໃນໂປຣແກຣມ ຕົວແປແບບ char*, int, double ພວກນີ້ແຫລະ ເມື່ອໂປແກມມັນຖືກສັ່ງໃຫ້ເຮັດວຽກ ມັນກໍຖືກໂຫລດເຂົ້າ memory ເທື່ອໜຶ່ງ ຕົວແປໃນໂປຣແກຣມກໍຈະຖືກຈອງເພື່ອວຽກຕາມທີ່ຕ້ອງການ ນັ້ນຄືໜຶ່ງ processແລ້ວ…. ແລະເມື່ອມັນຖືກໂຫລດເຂົ້າມາອີກເທື່ອໜຶ່ງຄື ຖືກອີກຄົນໜຶ່ງສັ່ງໃຫ້ເຮັດວຽກ ນັ້ນແຫລະ process ອີກໂຕກໍຖືກລັນຂຶ້ນມາ ໂປຣແກຣມດຽວກັນ ຈອງຫນ່ວຍຄວາມຈຳໃຫ້ກັບຕົວແປໃນໂປຣແກຣມນັ້ນເທົ່າກັນ ແຕ່ຖືກລັນຂຶ້ນມາອີກເທື່ອໜຶ່ງ ຄົນລະຕຳແໜ່ງແອດເດສ ນັ້ນເອງ….

ຊຶ່ງເມື່ອເປັນເຊັ່ນນີ້ແລ້ວ ແອດເດສ ໃນສ່ວນນັ້ນ ມັນເກັບໂຄ້ດໂປຣແກຣມທີ່ກຳລັງເຮັດວຽກຢູ່ ໃນ memory ສ່ວນນັ້ນຈະບໍ່ສາມາດຖືກຂຽນຂໍ້ມູນລົງໄປໄດ້

ເອົາລ່ະ… ເມື່ອໂປເຊດຖືກລັນ ໃນ Linux ນີ້ຈະມີໝາຍເລກໂປເຊດແຕ່ລະຕົວໃຫ້ກັບແຕ່ລະໂປເຊດດ້ວຍ ເຮົາສາມາດເບິ່ງໄດ້ຈາກການໃຊ້ຄຳສັ່ງ ps -af ຈາກ shell….

$ ps -af
UID PID PPID C STIME TTY TIME CMD
nus 6180 6118 0 23:42 pts /1 00:00:00. /p1
nus 6181 6180 0 23:42 pts /1 00:00:00. /p1
nus 6184 6118 0 23:42 pts /1 00:00:00 ps -af

process ແຕ່ລະຕົວທີ່ເຮັດວຽກນັ້ນຈະໄດ້ໝາຍເລກທີ່ບໍ່ຊ້ຳກັນເລີຍ ຊຶ່ງຈະຢູ່ລະຫວ່າງ 2-32768 ແລະເມື່ອມັນເຮັດວຽກສຳເລັດແລ້ວ ມັນກໍຈະຫາຍໄປ ແລະເມື່ອສັ່ງເຮັດວຽກນັ້ນງານນີ້ໃໝ່ ມັນກໍຈະເກີດຂຶ້ນອີກເທື່ອພ້ອມກັບໝາຍເລກທີ່ບໍ່ຊ້ຳກັນກັບຕົວທີ່ເຮັດວຽກຢູ່ອີກ ແບບນີ້ໄປເລື່ອຍໆ

ຕາລາງ process

ເຮົາສາມາດເປີດເບິ່ງprocess ທີ່ເຮັດວຽກຢູ່ໃນລະບົບ Linux ໄດ້ ໂດຍໃຊ້ຄຳສັ່ງ ps ຊຶ່ງຈະສະແດງລາຍລະອຽດແລະລາຍການທັງໝົດອອກມາໃຫ້ເບິ່ງ ມາເບິ່ງຕົວຢ່າງກັນເລີຍ

root@sni77er:/home/dev# ps
PID TTY TIME CMD
6528 pts /1 00:00:00 su
6529 pts /1 00:00:00 bash
6578 pts /1 00:00:00 gedit
6580 pts /1 00:00:00 gconfd -2
6954 pts /1 00:00:00 xmms
6959 pts /1 00:00:00 ps

ຈາກຕົວຢ່າງ ເປັນການໃຊ້ຄຳສັ່ງ ps ລ້າໆຊຶ່ງຈະສະແດງprocess ທີ run ຢູ່ເທິງ Terminal ນີ້ ແຕ່ຖ້າເຮົາເຕີມ -af ຊຶ່ງໝາຍເຖິງ all ແລະ full ກໍຈະໄດ້ລາຍລະອຽດຫລາຍຂຶ້ນ ດັ່ງນີ້

root@sni77er:/home/dev# ps -af
UID PID PPID C STIME TTY TIME CMD
root 6528 6118 0 Jul21 pts /1 00:00:00 su
root 6529 6528 0 Jul21 pts /1 00:00:00 bash
root 6578 6529 0 Jul21 pts /1 00:00:00 gedit
root 6580 1 0 Jul21 pts /1 00:00:00 /usr/lib/gconfd -2 11
root 6954 6529 2 00:10 pts /1 00:00:00 xmms
root 6962 6529 0 00:10 pts /1 00:00:00 ps -af

ຈາກຂ້າງເທີງບໍ່ຈຳເປັນແລ້ວວ່າໃນໜ້າຈໍຂອງທ່ານຈະຕ້ອງຄືກັນສະເໝີໄປ ການໃຊ້ຄຳສັ່ງທີ່ວ່ານີ້ຈະສະແດງລາຍການໂປແກມທີ່ກຳລັງເຮັດວຽກຢູ່ ດັ່ງຕົວຢ່າງ ໂປແກມ xmms ເຮັດວຽກຢູ່ຢ່າງເຫັນໄດ້ແຈ້ງເລີຍ ນີ້… ເຮົາກວດເບິ່ງໄດ້ແບບນີ້ ເບິ່ງເລີຍວ່າມັນມີໂປເຊດໝາຍເລກໃດ… ດັ່ງນີ້

UID PID PPID C STIME TTY TIME CMD
root 6954 6529 2 00:10 pts /1 00:00:00 xmms

ການທີ່ເຮົາຈະຮູ້ວ່າໂປຣແກຣມນັ້ນຄືໂປຣແກຣມຫຍັງ ໃຜເປັນຄົນrun ໃຫ້ທ່ານເບິ່ງດ້ານເທິງຊຶ່ງ UID ກໍຄືຜູ້ run ຫລືຜູ້ເປັນເຈົ້າຂອງ ແລະ PID ກໍຄືໝາຍເລກໂປເຊດ (ທີ່ວ່າບໍ່ຊ້ຳກັນເວົ້າຜ່ານມາ) ແລະ TTY ກໍຄື Terminal ທີ່ສັ່ງມັນ ຢ່າງໂປແກມ xmms ນັ້ນລັນມາຈາກ pts /1 ບາງທ່ານກໍອາດຈະເຫັນເປັນ tty /1, tty /2 ນັ້ນສະແດງວ່າລັນມາຈາກ terminal ໝາຍເລກນັ້ນ ນັ້ນເອງ

ການສັ່ງທຳລາຍໂປເຊດນັ້ນເຮັດໄດ້ບໍ່ຢາກໃຫ້ທ່ານໃຊ້ຄຳສັ່ງ kill ແລ້ວຕາມດ້ວຍໝາຍເລກໂປເຊດນັ້ນ ເຊ່ນ

root@sni77er:/home/dev# kill 6954
[2] + Killed xmms

ໂປເຊດໃນລະບົບ

ເອົາລ່ະ ເຮົາມາເບິ່ງໂປເຊດໃນລະບົບກັນນຳ… ເຮົາຈະໃຊ້ຄຳສັ່ງ ps -ax ໃນການເປີດເບິ່ງ ດັ່ງນີ້

root@sni77er:/home/dev# ps -ax
PID TTY STAT TIME COMMAND
1? Ss 0:01 /sbin/init
2? S 0:00 [migration /0]
3? SN 0:00 [ksoftirqd /0]
4? S 0:00 [watchdog /0]
5? S < 0:00 [events /0]
6? S < 0:00 [khelper]
7? S < 0:00 [kthread]
30? S < 0:00 [kblockd /0]
31? S < 0:00 [kacpid]
32? S < 0:00 [kacpi_notify]
123? S < 0:00 [kseriod]
3603? S < 0:01 [ipw2200/0]
4119 tty4 Ss+ 0:00 /sbin/getty 38400 tty4
4120 tty5 Ss+ 0:00 /sbin/getty 38400 tty5
4124 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
4125 tty3 Ss+ 0:00 /sbin/getty 38400 tty3
4126 tty1 Ss+ 0:00 /sbin/getty 38400 tty1
4127 tty6 Ss+ 0:00 /sbin/getty 38400 tty6
5075? S < 0:00 [kondemand /0]
5083? Ss 0:00 /usr/sbin/netdaemon
5094? Ss 0:00 /usr/sbin/vsftpd
5154? Ss 0:00 /usr/sbin/hcid -x -s
5171? S < 0:00 [krfcommd]
5215? Ss 0:00 /usr/sbin/atd
5230? Ss 0:00 /usr/sbin/cron
5284? Ss 0:00 /usr/sbin/apache2 -k start
5364? S 0:00 /usr/sbin/apache2 -k start
5365? S 0:00 /usr/sbin/apache2 -k start
5497? Ss 0:00 gnome-volume-manager –sm-client-id default4
5499? S 0:00 /usr/lib/gnome-vfs -2.0/gnome-vfs-daemon
5501? S 0:00 update-notifier
5507? S 0:00 nm-applet –sm-disable
5508? S 0:00 gnome-cups-icon –sm-client-id default3
5509? Ss 0:00 gnome-power-manager
5678? S 0:00 /usr/lib/nautilus-cd-burner/mapping-daemon
5696? Ss 0:01 gnome-screensaver
5750? S 1:39 gedit
6115? Sl 0:01 gnome-terminal
6117? S 0:00 gnome-pty-helper
6118 pts /1 Ss 0:00 bash
6528 pts /1 S 0:00 su
6529 pts /1 S 0:00 bash
6578 pts /1 S 0:00 gedit
6954 pts /1 Sl 0:00 xmms
6995 pts /1 R+ 0:00 ps -ax

ໂອ……… ເຕັມເລີຍ ເຫັນແລ້ວມາເບິ່ງບ່ອນນີ້ເລີຍ process ທຳອິດຄືຫຍັງ ເບິ່ງດີໆມັນກໍຄື /sbin/init ເປັນprocess ໝາຍເລກ 1 ທ່ານອາດຈະບອກວ່າອ້າວເປັນຫຍັງເຫັນບອກວ່າ process ມັນເລີ່ມຕົ້ນທີ່ 2 ບໍ່ແມ່ນຫວານັ້ນແຫລະ ບັກເລກ 1 ນັ້ນມັນສະຫງວນໄວ້ໃຫ້ກັບ processທຳອິດຂອງລະບົບນັ້ນກໍຄື process ແມ່ (Parent Process) ຊຶ່ງກໍຄືບັກ init ນັ້ນເອງ ເມື່ອ Linux ເລີ່ມເຮັດວຽກ process init ໝາຍເລກ 1 ກໍເລີ່ມແລ່ນ ມັນເປັນprocess ແມ່ ແລະມັນກໍຈະພາໃຫ້ໂປແກມອື່ນ ໆ ລັນຂຶ້ນມາອີກ ເປັນprocess ລູກໆ ຫລານໆ (Child Process) ເມື່ອຮອດບ່ອນນັ້ນ init ເອງນັ້ນແຫລ່ະຊິກາຍເປັນ process ປູ່ໆ ທວດໆ ໄປແລ້ວ…. ແລະເບິ່ງຕໍ່ມາມັນກໍຈະໄລ່ມາເລື່ອຍໆ ຈົນມາເຖິງບັນທັດທີ່ເປັນ Termial ຫລືເປັນ Shell ແບບຕອນທີ່ກຳລັງ run ໂຕ Terminal ນີ້ຢູ່ ກໍມີprocess ປາກົດຂຶ້ນ ຫລືແບບຕອນທີ່ກຳລັງໃຊ້ຄຳສັ່ງ ps -ax ຢູ່ ມັນກໍສະແດງອອກມາຄືກັນ ຊຶ່ງເປັນຄຳສັ່ງໃນແຖວສຸດທ້າຍ… ລອງເບິ່ງຕົວຢ່າງດ້ານເທິງປະກອບ ເພື່ອຄວາມເຂົ້າໃຈຫາອັນມາຫມາຍໄວ້ກະໄດ້ເພື່ອຄວາມເຂົ້າໃຈ….

Tags: , ,

3 Comments

Leave a Reply

You must be logged in to post a comment.