คุณเปิด tab อื่นในเบราว์เซอร์ไว้อีกอย่างน้อยห้า tab เพื่อหาคำตอบสำหรับปัญหา Linux ที่กำลังเจออยู่ใช่ไหม?
พฤติกรรมแบบนี้ไม่ได้เกิดขึ้นเฉพาะกับคุณหรือมนุษย์เท่านั้น เครื่องจักรก็ทำงานหลายอย่างพร้อมกันได้เช่นกัน และเช่นเดียวกับคุณ Linux ก็เป็น multitasker ที่มีหลายโปรเซสทำงานพร้อมกันในเวลาเดียวกัน ไม่ว่าคุณจะเป็นนักพัฒนาที่ใช้ Linux ในการทำงาน หรือผู้ใช้ทั่วไปที่ใช้ Linux ในชีวิตประจำวัน การเข้าใจโปรเซสที่ทำงานขนานกันเหล่านี้จะช่วยให้คุณควบคุมระบบได้อย่างเต็มที่ การจัดการโปรเซสและการควบคุมระบบเป็นสิ่งสำคัญในการใช้งาน Linux
หากต้องการจัดการโปรเซสที่รันอยู่บนระบบได้อย่างมีประสิทธิภาพ ติดตามสิ่งที่เกิดขึ้นแบบ real-time มองภาพรวมของโปรเซสเบื้องหลังทั้งหมด และควบคุมทรัพยากรของระบบ คุณจำเป็นต้องมีความเข้าใจด้านการจัดการโปรเซส คำสั่ง ps aux เป็นคำสั่งที่มีบทบาทสำคัญในการจัดการโปรเซสและการควบคุมระบบ ในบทความนี้เราจะเรียนรู้เกี่ยวกับคำสั่ง ps aux และการใช้งานในรูปแบบต่างๆ พร้อมทั้งทำความเข้าใจพื้นฐานการทำงานของโปรเซสใน Linux
ทำความเข้าใจการจัดการโปรเซสใน Linux
เมื่อทำงานกับ Linux การโต้ตอบกับระบบส่วนใหญ่ทำผ่านคำสั่ง โปรเซสใน Linux คือการประมวลผลคำสั่งที่ถูกรัน การจัดการโปรเซสใน Linux คือการควบคุมโปรเซสที่คำสั่งนั้นสร้างขึ้น คุณสามารถหยุด เริ่ม หรือดำเนินโปรเซสที่ถูกหยุดไว้ต่อได้ รวมถึงแก้ไขคำสั่งที่กำลังทำงานอยู่ด้วย
โปรเซสใน Linux มีสองประเภท ได้แก่:
- กระบวนการในพื้นหน้า
- กระบวนการพื้นหลัง
Foreground Processes ใน Linux
Foreground process คือโปรเซสที่กำลังทำงานและโดยทั่วไปต้องการการโต้ตอบกับผู้ใช้อย่างต่อเนื่องแบบ real-time เมื่อ foreground process กำลังทำงาน โปรเซสอื่นจะถูกหยุดชั่วคราว ทำให้ไม่สามารถรันคำสั่งอื่นได้ Foreground process รับข้อมูลจากคีย์บอร์ดในรูปแบบ standard input หรือ stdin เพื่อไม่ให้เกิดความสับสน stdin และ stdout คือ data streams ของ Linux ที่มีพร้อมกับ stderr ซึ่งเป็นช่องทางที่ผู้ใช้โต้ตอบและส่งข้อมูลให้กับโปรเซส ส่วน standard output หรือ stdout คือผลลัพธ์ที่โปรเซสสร้างขึ้นตามฟังก์ชันการทำงานและข้อมูลที่ได้รับ Foreground process คือโหมดการทำงานเริ่มต้นของ Linux
Background Processes ใน Linux
Background process คือโปรเซสที่ตรงข้ามกับ foreground process โดยสิ้นเชิง เนื่องจากไม่ต้องการการโต้ตอบจากผู้ใช้และไม่ครอบครอง terminal ทั้งหมด ทำให้สามารถรันโปรเซสอื่นได้พร้อมกัน รูปแบบ input และ output ของ background process ก็แตกต่างออกไปด้วย โดยทั่วไปจะไม่รับ stdin แต่ผลลัพธ์ของโปรเซสสามารถแสดงเป็น stdout ได้ การแสดงผลของ background process เกิดขึ้นพร้อมกันกับ output ของ foreground process อื่น ทำให้คุณเห็นความคืบหน้าหรือผลลัพธ์ของ background process ได้โดยไม่ขัดขวางการทำงานอื่นที่สำคัญ
เนื่องจากการทำงานหลายอย่างใน Linux ขึ้นอยู่กับ command line foreground process อาจเป็นอุปสรรค ในขณะที่การรันโปรเซสเบื้องหลังจะทำให้ terminal ของคุณว่างสำหรับงานอื่น ดังนั้นการย้าย foreground task ไปทำงานเบื้องหลังจึงเป็นทางเลือกที่สมเหตุสมผล หากต้องการ ส่งโปรเซสไปทำงานเบื้องหลัง คุณต้องหยุดการทำงานใน foreground ก่อน โดยกด CTRL+Z จากนั้นพิมพ์คำสั่ง bg เพื่อให้โปรเซสที่หยุดไว้รันต่อในเบื้องหลัง และหากต้องการนำกลับมาทำงานใน foreground ให้ใช้คำสั่ง fg
สถานะของกระบวนการ: ไวยากรณ์ คำสั่ง และการอ่านผลลัพธ์
การจัดการกระบวนการใน Linux อย่างมีประสิทธิภาพนั้น จำเป็นต้องเข้าใจสถานะของกระบวนการที่ตรวจสอบได้ด้วยคำสั่ง ps aux แต่ก่อนที่จะลงลึกในเรื่องนี้ มาทำความเข้าใจสถานะของกระบวนการแต่ละประเภทกันก่อน แม้จะมีกระบวนการและสถานะหลายรูปแบบ แต่ตารางด้านล่างนี้รวบรวมสถานะที่พบบ่อยที่สุดไว้ให้แล้ว:
| สถานะการประมวลผล | คำอธิบาย | |
| กำลังทำงาน(R) | กระบวนการกำลังทำงานอยู่และใช้ทรัพยากร CPU อยู่ในขณะนี้ | |
| นอนหลับ | ขัดจังหวะได้ (S) | กระบวนการกำลังรอ input หรือเหตุการณ์ที่กำหนดไว้เพื่อกลับมาทำงานต่อ ขณะนี้ไม่ได้ใช้ทรัพยากร CPU เมื่อทรัพยากรพร้อมใช้งาน หรือได้รับ signal กระบวนการจะเริ่มทำงานอีกครั้ง |
| ไม่สามารถขัดจังหวะได้ (D) | เช่นเดียวกับกระบวนการที่อยู่ในสถานะ interruptible sleep กระบวนการที่อยู่ในสถานะ uninterruptible sleep จะไม่ใช้ทรัพยากร CPU ข้อแตกต่างเพียงอย่างเดียวคือ กระบวนการนี้ไม่ตอบสนองต่อ signal ใดๆ และจะกลับมาทำงานได้ก็ต่อเมื่อทรัพยากรพร้อมใช้งานเท่านั้น | |
| หยุด(T) | กระบวนการถูกหยุดชั่วคราวจาก input ของผู้ใช้หรือเหตุการณ์เฉพาะ กระบวนการที่อยู่ในสถานะ stopped จะไม่ใช้ทรัพยากร CPU ใดๆ | |
| ตายแล้ว(X) | กระบวนการสิ้นสุดลงแล้วและไม่มีอยู่ในระบบอีกต่อไป | |
การเข้าใจสถานะของกระบวนการเหล่านี้อย่างถ่องแท้ถือเป็นพื้นฐานสำคัญในการจัดการและแก้ไขปัญหาระบบ Linux ได้อย่างมีประสิทธิภาพ ต่อไปมาดูไวยากรณ์และคำสั่งที่ใช้ตรวจสอบสถานะกระบวนการใน Linux รวมถึงวิธีอ่านผลลัพธ์ที่ได้
ไวยากรณ์และคำสั่งสำหรับตรวจสอบสถานะกระบวนการ
คุณสามารถตรวจสอบสถานะกระบวนการใน Linux ได้ด้วยไวยากรณ์พื้นฐานของคำสั่ง ps ดังนี้:
ps [process name]
นอกจากนี้ยังมี option อื่นๆ ที่ใช้ร่วมกับคำสั่ง ps ได้อีก:
aux: option นี้แสดงรายการกระบวนการทั้งหมดที่ทำงานอยู่บนระบบอย่างครบถ้วน โดยให้ข้อมูลต่างๆ เช่น process ID (PID), parent process ID (PPID), การใช้งาน CPU และ memory รวมถึงสถานะของกระบวนการ ผลลัพธ์จากคำสั่ง ps aux นั้นเป็นระเบียบกว่า อ่านง่ายกว่า และมีข้อมูลที่เป็นประโยชน์มากกว่าคำสั่ง ps พื้นฐานมาก
ef: option นี้แสดงรายการกระบวนการแบบ full-format พร้อมรายละเอียดเพิ่มเติม รวมถึงโครงสร้างลำดับชั้นของกระบวนการในรูปแบบ tree
l: option นี้แสดงรายการในรูปแบบ long listing เพื่อให้ข้อมูลเกี่ยวกับกระบวนการอย่างละเอียดยิ่งขึ้น
การอ่านผลลัพธ์
เมื่อรันคำสั่ง ps พร้อม option ที่ต้องการ ระบบจะแสดงผลลัพธ์ที่แทนกระบวนการทั้งหมดที่กำลังทำงานอยู่บนเครื่องของคุณ ผลลัพธ์ประกอบด้วยคอลัมน์ต่างๆ ที่แสดงคุณลักษณะของกระบวนการ ได้แก่ process ID (PID), parent process ID (PPID), การใช้งาน CPU, การใช้งาน memory, สถานะของกระบวนการ, ประเภทของ terminal และชื่อคำสั่ง
คำอธิบายของแต่ละคอลัมน์มีดังนี้:
PID: คอลัมน์นี้แสดง ID เฉพาะของกระบวนการ
TTY: คอลัมน์นี้แสดงประเภทของ terminal ที่ผู้ใช้ล็อกอินอยู่
เวลา: คอลัมน์นี้บ่งบอกถึงปริมาณการใช้งาน CPU ของกระบวนการนี้ในหน่วยนาทีและวินาที
CMD: คอลัมน์นี้แสดงชื่อคำสั่งที่เป็นต้นเหตุให้เกิดกระบวนการนี้
การวิเคราะห์ข้อมูลจากคำสั่ง ps จะช่วยให้คุณเข้าใจพฤติกรรมของเครื่อง Linux ของคุณได้ลึกซึ้งยิ่งขึ้น
เทคนิค ps ขั้นสูงสำหรับการจัดการกระบวนการด้วยคำสั่ง ps
มาดูฟีเจอร์ขั้นสูงของคำสั่ง ps และวิธีใช้งานให้เกิดประโยชน์สูงสุด:
1. การเรียงลำดับกระบวนการ
คำสั่ง ps aux สามารถเรียงลำดับผลลัพธ์ตามคอลัมน์ต่างๆ ได้ ตัวอย่างเช่น คุณสามารถเรียงกระบวนการตาม process ID หรือการใช้งาน CPU เพื่อดูในลำดับที่ต้องการได้
ตัวอย่างการเรียงลำดับกระบวนการตาม process ID โดยใช้ ps aux มีดังนี้:
ps aux –-sort pid
คำสั่ง head ใช้เพื่อแสดงเฉพาะห้าแถวแรกของผลลัพธ์

2. การแสดงผลโครงสร้าง Process Tree
หากต้องการดูความสัมพันธ์แบบ parent-child ของกระบวนการได้อย่างชัดเจน ให้ใช้คำสั่ง ps พร้อมกับ option forest
ps -aux --forest

หากต้องการดูความสัมพันธ์ระหว่างกระบวนการในรูปแบบโครงสร้างต้นไม้ สามารถใช้คำสั่ง pstree ได้เช่นกัน คำสั่งนี้จะแสดงผลลัพธ์ที่อ่านง่ายกว่าและสื่อถึงลำดับชั้นระหว่างกระบวนการได้อย่างชัดเจน โดยพิมพ์คำสั่งดังนี้:
pstree [pid or username]
การระบุ PID ให้กับคำสั่งนี้ หมายถึงการกำหนดให้กระบวนการนั้นเป็น root ของต้นไม้
3. กระบวนการกรองข้อมูล
สมมติว่าต้องการทำงานกับกระบวนการเฉพาะกลุ่ม เช่น ต้องการแสดงรายการกระบวนการทั้งหมดของผู้ใช้คนใดคนหนึ่ง การกรองกระบวนการตามเงื่อนไขสามารถทำได้โดยใช้คำสั่ง ps ในตัวอย่างนี้ เราจะกรองกระบวนการตาม username
ps -u [username]

คำสั่ง ps aux grep สามารถกรองกระบวนการตาม pattern หรือ keyword ใดก็ได้ที่ระบุให้กับคำสั่ง ดูตัวอย่างจาก code ด้านล่าง:

คำสั่งนี้จะแสดงรายการกระบวนการทั้งหมดก่อน แล้วส่งผลลัพธ์ให้คำสั่ง grep กรองรายการที่ยาวนั้นตาม process ID ในภาพด้านบน จะเห็นรายการกระบวนการทั้งหมดที่มีตัวเลข 15 ปรากฏอยู่ในข้อมูล
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง ps และความสามารถของมัน สามารถอ่าน manual page ของคำสั่งนี้ได้ โดยใช้ code ด้านล่างเพื่อแสดง manual page:
man ps
การจัดการลำดับความสำคัญของ Task ใน Linux
เพื่อให้เข้าใจการจัดการกระบวนการใน Linux ได้ชัดเจนยิ่งขึ้น เราควรพูดถึง process priority และวิธีเปลี่ยนค่าด้วย ลองนึกถึงสถานการณ์ที่รันหลายกระบวนการพร้อมกัน และ CPU รับภาระงานหนักเกินไป หากต้องการจัดสรรทรัพยากรให้ทำงานได้อย่างถูกต้องในสถานการณ์นั้น จำเป็นต้องปรับลำดับความสำคัญของงานที่กำลังทำงานอยู่ กระบวนการแต่ละรายการใน Linux มีค่า priority กำกับอยู่ ค่านี้ช่วยให้ kernel จัดลำดับงานได้ถูกต้อง ค่า priority อยู่ในช่วง -20 ถึง 19 โดย 19 หมายถึงงานที่มีความสำคัญน้อยที่สุด และ -20 หมายถึงงานที่เร่งด่วนที่สุด กระบวนการที่มี priority สูงสุดจะได้รับเวลา CPU มากกว่ากระบวนการอื่น ค่า priority มักเรียกว่าค่า "nice" โดยค่า nice ที่ต่ำกว่าหมายถึง priority ที่สูงกว่า
สามารถใช้คำสั่ง nice และ renice เพื่อจัดสรรทรัพยากรของระบบได้อย่างมีประสิทธิภาพ
แต่ก่อนจะเปลี่ยน priority ของกระบวนการ มาดู use case แรกของคำสั่ง ps กันก่อน
- การแสดง priority ปัจจุบันของกระบวนการทั้งหมดด้วยคำสั่ง ps:
คำสั่งนี้จะแสดงรายการกระบวนการทั้งหมดพร้อม process ID (PID), ชื่อคำสั่ง และค่า priority ปัจจุบัน (nice value):
ps -eo pid,cmd,nice

- การเริ่มกระบวนการด้วย priority สูงเป็นค่าเริ่มต้นโดยใช้คำสั่ง nice:
สามารถเริ่มกระบวนการด้วย priority ที่ต้องการได้โดยใช้คำสั่งนี้:
nice -n [priority] [command]
แทนที่ [priority] ด้วยค่าติดลบที่ต้องการซึ่งแทน priority level และแทนที่ [command] ด้วยคำสั่งที่ต้องการรัน
ตัวอย่างเช่น:

- การเปลี่ยนลำดับความสำคัญของคำสั่งที่กำลังรันอยู่:
renice -n [priority] -p [PID]
แทนที่ Process ID ของโปรเซสที่ต้องการจัดการด้วย [PID]
หากต้องการเครื่อง Linux ที่มีประสิทธิภาพสูงสำหรับงานหลากหลายประเภท Linux VPS คือตัวเลือกที่เหมาะสมที่สุดสำหรับคุณ Cloudzy มีแผนบริการ Linux VPS หลายรูปแบบพร้อมติดตั้ง distro ที่คุณต้องการไว้ล่วงหน้า ด้วยจุดเด่นอย่างการสนับสนุน 24/7 นโยบายคืนเงินภายใน 30 วัน และการรับประกัน uptime 99.95% Cloudzy จึงสามารถรักษาราคาให้อยู่ในระดับที่เข้าถึงได้ แผน Linux VPS ของเราเริ่มต้นเพียง $4.95/เดือน
เลือกแพ็กเกจ Linux VPS แบบประหยัดหรือพรีเมียมสำหรับโฮสต์เว็บไซต์หรือรีโมทเดสก์ท็อป ในราคาที่คุ้มค่าที่สุด VPS ทำงานบน Linux KVM เพื่อประสิทธิภาพที่สูงขึ้น และติดตั้งบนฮาร์ดแวร์ที่ทรงพลังพร้อมพื้นที่จัดเก็บ NVMe SSD เพื่อความเร็วสูงสุด
อ่านเพิ่มเติมสรุป
โดยสรุป การจัดการโปรเซสและควบคุมระบบเป็นทักษะที่ขาดไม่ได้สำหรับผู้ดูแลระบบ ผู้ที่สนใจศึกษา Linux อย่างจริงจัง และผู้ใช้ Linux ทั่วไป การทำความเข้าใจคำสั่ง ps จะช่วยให้การเรียนรู้เรื่องการจัดการโปรเซสง่ายขึ้นมาก บทความนี้จึงครอบคลุมกรณีการใช้งานที่สำคัญของคำสั่ง ps พร้อมทั้งแนะนำให้ผู้อ่านรู้จักกับโปรเซสใน Linux
คำถามที่พบบ่อย
คำสั่ง ps aux ใน Linux คืออะไร?
คำสั่ง ps aux ใน Linux เป็นคำสั่งที่ใช้กันอย่างแพร่หลายสำหรับดูข้อมูลโปรเซสที่กำลังทำงานอยู่ คำสั่งนี้แสดงรายการโปรเซสทั้งหมดในรูปแบบที่อ่านง่าย ครอบคลุมทั้ง Process ID (PID) การใช้งาน CPU และ memory สถานะการทำงาน และรายละเอียดสำคัญอื่น ๆ
โปรเซสใน Linux มีกี่ประเภท?
มี 2 ประเภท ได้แก่ Foreground process และ Background process โดย Foreground process จะครอบครอง terminal ระหว่างทำงานและไม่อนุญาตให้รันคำสั่งอื่นพร้อมกัน ส่วน Background process ทำงานอยู่เบื้องหลังโดยไม่ยึด terminal ไว้
จะดูรายการโปรเซสที่กำลังรันอยู่บนระบบ Linux ได้อย่างไร?
คุณสามารถดูรายการโปรเซสที่กำลังทำงานบนระบบ Linux ได้ด้วยคำสั่งอย่าง ps, top หรือ htop ตัวอย่างเช่น คำสั่ง ps aux ของ Linux จะแสดงข้อมูลโดยละเอียดของโปรเซสทั้งหมดที่กำลังรันอยู่