1 คะแนน โดย GN⁺ 2024-07-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การทำ ps aux ด้วย bash

  • คำถามสัมภาษณ์: สามารถสมมติสถานการณ์ต่อไปนี้เป็นคำถามสัมภาษณ์สำหรับตำแหน่งที่ต้องมีความรู้เกี่ยวกับ bash/linux

    • กำลังใช้ bash shell บนเครื่องที่เชื่อมต่อผ่าน SSH อยู่ แต่เป็นสถานการณ์ที่ไม่สามารถสร้างโปรเซสใหม่ได้
    • ถ้า PID ทั้งหมดถูกใช้งานอยู่ จะทำอย่างไร
  • วิธีแก้: ใช้เครื่องมือนี้แล้วสามารถทำงานได้เสมือนใช้คำสั่ง ps aux

    • ไม่ได้ทำงานได้ 100% ในทุกสถานการณ์ แต่ทำงานได้คล้ายกัน

สรุปโดย GN⁺

  • บทความนี้นำเสนอวิธีที่ใช้แทนคำสั่ง ps aux ได้ ในสถานการณ์ที่ไม่สามารถสร้างโปรเซสใหม่จาก bash shell ได้
  • อธิบายวิธีตรวจสอบโปรเซสของระบบผ่านสคริปต์ bash
  • วิธีนี้อาจทำงานได้ไม่สมบูรณ์แบบในทุกสถานการณ์ แต่มีประโยชน์ได้ในสภาพแวดล้อมที่มีข้อจำกัด
  • เครื่องมืออื่นที่ให้ความสามารถคล้ายกัน ได้แก่ htop หรือคำสั่ง top

1 ความคิดเห็น

 
GN⁺ 2024-07-30
ความคิดเห็นบน Hacker News
  • ปัญหาที่ยากที่สุดในวิทยาการคอมพิวเตอร์คือการจัดแนว

    • ฟังก์ชันที่ดูเรียบง่ายก็ใช้เวลานานมากในความเป็นจริง
    • การเขียนฟังก์ชันจัดแนวคอลัมน์ในหลายภาษาโปรแกรมมิงเป็นเรื่องยากเสมอ
    • แม้จะใช้ f-strings และความสามารถในการ padding ของ Python ก็ยังได้โค้ดที่ซับซ้อนและอ่านยาก
    • ระหว่างเขียนโค้ดตัวอย่างก็ยังต้องแก้บั๊กหลายจุด
  • ตัวอย่างคำถามสัมภาษณ์ที่ต้องอาศัยความรู้เกี่ยวกับ bash/Linux

    • เป็นคำถามว่าจะแก้ปัญหาอย่างไรเมื่อไม่สามารถสร้างโปรเซสใหม่ได้เพราะ PID ถูกใช้งานหมดแล้ว
    • ตรวจสอบโปรเซสที่กินพื้นที่ PID ได้จากไฟล์ซิสเต็ม /proc/[pid]/
    • kill เป็นคำสั่ง built-in ของ bash จึงใช้งานได้โดยไม่ต้องสร้างโปรเซสใหม่
    • หากหาโปรเซสแม่แล้วหยุดมัน ก็สามารถแก้ปัญหาได้
    • สามารถเขียนสคริปต์ที่สะอาดโดยไม่สร้าง pipe หรือ subshell ได้
  • ประสบการณ์สัมภาษณ์ตำแหน่ง SRE ที่บริษัทเทคขนาดใหญ่ในสหรัฐเมื่อปี 2011

    • เป็นบริษัทที่ทำทางเลือกออนไลน์บนเบราว์เซอร์แทน MS Office
    • หลังสัมภาษณ์ทางโทรศัพท์ ได้รับโจทย์ให้เขียนโปรแกรมทดแทน netstat ด้วย bash
    • ตอนนั้นยังไม่รู้วิธีหาข้อมูลของซ็อกเก็ตจาก /proc/ เลยเขียนโปรแกรมทดแทน ps และ fuser แทน
    • ผู้สัมภาษณ์ก็ยอมรับ และหลังจากนั้นจึงเข้าสู่การสัมภาษณ์หน้างาน
    • จึงสงสัยว่าสถานการณ์นี้อิงจากโลกความจริงหรือไม่
  • Izabera จาก bash@libera เป็นหนึ่งในผู้เชี่ยวชาญด้าน bash

    • ได้เรียนรู้อะไรมากมายในช่วง 10 ปีที่ผ่านมา
  • ตัวอย่างโค้ด bash ที่สะอาด

    • โค้ด bash ส่วนใหญ่ไม่มีประสิทธิภาพ แต่โค้ดนี้เป็นตัวอย่างที่ดี
  • เป็นคำถามว่าจะแก้ปัญหาอย่างไรเมื่อไม่สามารถสร้างโปรเซสใหม่ได้เพราะ PID ถูกใช้งานหมดแล้ว

    • ใน POSIX shell สคริปต์ bash นี้ใช้งานร่วมกันไม่ได้
  • ใช้งานไม่ได้บน bash 3.2 แต่ใช้งานได้บน bash 4.2

    • มีข้อผิดพลาดของอักขระรูปแบบใน printf ของโค้ดตัวอย่าง
  • มีข้อเสนอกรณีใช้งานที่ดีกว่าสำหรับการแสดงรายการโปรเซสบนระบบที่ไม่ได้ติดตั้ง procps

  • สามารถเขียน listener และ client ด้วย bash ได้เช่นกัน แต่ในทางปฏิบัติไม่แนะนำ