คุณเคยพบกับสถานการณ์ที่คุณต้องหยุดกระบวนการที่ทำงานบนพอร์ตเฉพาะบนเครื่อง Linux ของคุณหรือไม่
คุณอาจกังวลว่าแอปพลิเคชันที่คุณใช้งานอยู่ทำงานผิดปกติหรือใช้ทรัพยากรเครือข่ายหรือพลังงาน CPU ในเครื่องมากเกินไป แอปพลิเคชันดังกล่าวอาจเป็นภัยคุกคามความปลอดภัยที่คุณต้องการกำจัด ป>
ไม่ว่าจะด้วยเหตุผลใดก็ตาม คุณสามารถใช้คำสั่ง fuser, lsof และ netstat จากเทอร์มินัล (พร้อมกับ kill) เพื่อช่วยคุณค้นหาและฆ่ากระบวนการ Linux โดยใช้หมายเลขพอร์ต คำสั่งเหล่านี้จะทำงานได้บนระบบปฏิบัติการ Linux ส่วนใหญ่ รวมถึง Ubuntu
วิธีการฆ่ากระบวนการ Linux โดยใช้คำสั่ง fuser
วิธีที่ง่ายที่สุดวิธีหนึ่งในการฆ่ากระบวนการโดยใช้หมายเลขพอร์ตคือการใช้คำสั่งฟิวเซอร์ คำสั่งเทอร์มินัล Linux นี้สามารถแสดงรายการหรือฆ่ากระบวนการที่เข้าถึงไฟล์หรือซ็อกเก็ต หากแอปทำงานโดยมีกิจกรรมเครือข่าย (และใช้พอร์ตเปิด) แอปนั้นอาจกำลังทำสิ่งใดสิ่งหนึ่งจากสองสิ่งนี้
ก่อนที่คุณจะดำเนินการต่อ คุณจะต้องตรวจสอบให้แน่ใจว่าคุณรู้สึกสบายใจที่จะใช้เทอร์มินัลบรรทัดคำสั่งบน Linux PC ของคุณ
หากต้องการแสดงรายการกระบวนการที่ใช้หมายเลขพอร์ตโดยใช้ฟิวเซอร์ คุณสามารถใช้ไวยากรณ์ต่อไปนี้:
พอร์ตโปรโตคอล fuser -n
ในตัวอย่างนี้ โปรโตคอลอาจเป็น tcp หรือ udp ในขณะที่พอร์ตคือหมายเลขพอร์ตที่คุณต้องการตรวจสอบ ตัวอย่างเช่น หากต้องการดูว่ากระบวนการใดกำลังใช้พอร์ต TCP 80 คุณสามารถเรียกใช้:
ฟิวเซอร์ -n tcp 80
ซึ่งจะพิมพ์ ID กระบวนการ (PID) ของกระบวนการที่ใช้พอร์ตนั้น
หากต้องการหยุดกระบวนการเหล่านั้น คุณสามารถเพิ่มตัวเลือก -k ลงในฟิวเซอร์ได้ การดำเนินการนี้จะส่งสัญญาณ SIGTERM ไปยังแต่ละกระบวนการ โดยขอให้ยุติอย่างสง่างาม ตัวอย่างเช่น:
ฟิวเซอร์ -k -n tcp 80
การดำเนินการนี้จะฆ่ากระบวนการทั้งหมดที่ใช้พอร์ต TCP 80
หากกระบวนการบางอย่างไม่ตอบสนองต่อ SIGTERM คุณสามารถใช้ -KILL แทน -k สิ่งนี้จะส่งสัญญาณการฆ่า (SIGKILL) ซึ่งสามารถช่วยบังคับให้กระบวนการที่กำลังทำงานอยู่ที่คุณระบุให้ยุติทันที อย่างไรก็ตาม สิ่งนี้อาจทำให้ข้อมูลสูญหายหรือเสียหายได้ ดังนั้นโปรดใช้อย่างระมัดระวัง ตัวอย่างเช่น:
ฟิวเซอร์ -KILL -n tcp 80
สิ่งนี้จะฆ่ากระบวนการทั้งหมดที่ใช้พอร์ต TCP 80 อย่างแข็งขัน หากคุณประสบปัญหาใดๆ ให้รันคำสั่งเหล่านี้ในฐานะผู้ใช้ขั้นสูง (โดยใช้คำสั่ง sudo) หรือโดยใช้ผู้ใช้รูทแทน
วิธีการปิดกระบวนการ Linux โดยใช้คำสั่ง lsof
อีกวิธีในการฆ่ากระบวนการโดยใช้หมายเลขพอร์ตบน Linux PC คือการใช้คำสั่ง lsof คำสั่งนี้สามารถแสดงรายการไฟล์และซ็อกเก็ตที่เปิดอยู่ในระบบของคุณ
เมื่อต้องการแสดงรายการกระบวนการที่ใช้หมายเลขพอร์ตเฉพาะ คุณสามารถใช้ไวยากรณ์ต่อไปนี้:
โปรโตคอล lsof -i:พอร์ต
เช่นเคย โปรโตคอลอาจเป็น tcp หรือ udp ในขณะที่พอร์ตคือหมายเลขพอร์ตที่คุณต้องการตรวจสอบ ตัวอย่างเช่น หากต้องการดูว่ากระบวนการใดใช้พอร์ต TCP 53 (โดยทั่วไปใช้สำหรับคำขอ DNS) คุณสามารถเรียกใช้คำสั่งนี้:
lsof -i tcp:53
การดำเนินการนี้จะพิมพ์ข้อมูลบางอย่างเกี่ยวกับแต่ละกระบวนการที่ใช้พอร์ตนั้น รวมถึง PID ด้วย
หากต้องการหยุดกระบวนการเหล่านั้น คุณสามารถใช้ตัวเลือก -t กับ lsof วิธีนี้จะพิมพ์เฉพาะ PID ของกระบวนการโดยไม่มีข้อมูลอื่นใด จากนั้นคุณสามารถไพพ์เอาต์พุตนี้ไปยังคำสั่ง kill พร้อมตัวเลือกสัญญาณใดก็ได้ ตัวอย่างเช่น:
ฆ่า $(lsof -t -i tcp:53)
ซึ่งจะส่งสัญญาณ SIGTERM (ค่าเริ่มต้น) ไปยังกระบวนการทั้งหมดที่ใช้พอร์ต TCP 53
หากกระบวนการบางอย่างไม่ตอบสนองต่อสัญญาณ SIGTERM เหมือนเมื่อก่อน คุณสามารถใช้ -9 แทนที่จะไม่ทำอะไรเลยหลังจาก kill การดำเนินการนี้จะส่งสัญญาณ SIGKILL เหมือนเมื่อก่อน บังคับให้ยุติการทำงานทันที แต่อาจทำให้ข้อมูลสูญหายหรือเสียหายได้ ตัวอย่างเช่น:
ฆ่า -9 $(lsof -t -i tcp:53)
สิ่งนี้จะส่งสัญญาณ SIGKILL (ค่าเริ่มต้น) ไปยังกระบวนการทั้งหมดโดยใช้พอร์ต TCP 53 อย่างรุนแรง
วิธีการฆ่ากระบวนการ Linux โดยใช้คำสั่ง netstat
คุณยังสามารถใช้คำสั่ง netstat เพื่อติดตามกระบวนการที่ทำงานบน Linux PC ของคุณโดยใช้พอร์ตเครือข่ายที่ใช้งานอยู่และเปิดอยู่ netstat ช่วยให้คุณดูการเชื่อมต่อเครือข่ายและสถิติบนระบบของคุณ ทำให้คุณสามารถระบุกระบวนการที่เป็นปัญหาได้
หากต้องการแสดงรายการกระบวนการโดยใช้หมายเลขพอร์ตพร้อมกับ PID คุณต้องเพิ่มสองตัวเลือก:-p ซึ่งแสดง PID และ -l ซึ่งแสดงเฉพาะซ็อกเก็ตการฟังเท่านั้น ป>
คุณต้องระบุโปรโตคอล (tcp, udp ฯลฯ) และกรองตามสถานะ (LISTEN เป็นต้น) ตัวอย่างเช่น หากต้องการดูว่ากระบวนการ TCP ใดกำลังรับฟังพอร์ตใดๆ คุณสามารถเรียกใช้:
netstat -p tcp -l
ซึ่งจะพิมพ์ข้อมูลเกี่ยวกับแต่ละซ็อกเก็ต TCP ที่รับฟังบนพอร์ตใดๆ รวมถึง PID ด้วย
หากต้องการกรองตามพอร์ตเฉพาะ คุณต้องเพิ่มตัวเลือกอื่น:-n ซึ่งแสดงที่อยู่ที่เป็นตัวเลขแทนชื่อ คุณต้องระบุรูปแบบที่อยู่ที่แน่นอนด้วย:[protocol][@hostname|hostaddr][:service|port].
ตัวอย่างเช่น หากต้องการดูว่ากระบวนการ TCP ใดกำลังฟังบนพอร์ต 80 คุณสามารถเรียกใช้:
netstat -p tcp -l -n 80
การดำเนินการนี้จะพิมพ์ข้อมูลเกี่ยวกับซ็อกเก็ต TCP แต่ละรายการที่รับฟังบนพอร์ต 8080 รวมถึง PID ด้วย
หากต้องการฆ่ากระบวนการเหล่านั้น คุณสามารถใช้คำสั่ง kill พร้อมตัวเลือกสัญญาณที่คุณต้องการและ PID ที่คุณได้รับจาก netstat ตัวอย่างเช่น:
ฆ่า 1234 5678
ซึ่งจะส่งสัญญาณ SIGTERM (ค่าเริ่มต้น) ไปยังการประมวลผลด้วย PID 1234 และ 5678
หากกระบวนการบางอย่างไม่ตอบสนองต่อสัญญาณ SIGTERM เหมือนเมื่อก่อน คุณสามารถใช้ -9 แทนที่จะไม่ทำอะไรเลยหลังจาก kill การดำเนินการนี้จะส่งสัญญาณ SIGKILL เหมือนเมื่อก่อน บังคับให้ยุติการทำงานทันที แต่อาจทำให้ข้อมูลสูญหายหรือเสียหายเหมือนเมื่อก่อน ตัวอย่างเช่น:
ฆ่า -9 1234 5678
สิ่งนี้จะส่งสัญญาณ SIGKILL ไปยังกระบวนการที่มี PID 1234 และ 5678 อย่างมีกำลัง เป็นต้น แทนที่ 1234 ด้วย PID ที่ถูกต้องสำหรับกระบวนการทำงานของคุณ
ควบคุมแอปพลิเคชัน Linux ของคุณ
ด้วยขั้นตอนที่อธิบายไว้ข้างต้น คุณสามารถปิดกระบวนการ Linux ที่ทำงานอยู่ได้อย่างรวดเร็วโดยใช้หมายเลขพอร์ตโดยใช้บรรทัดคำสั่ง Linux อย่าลืมใช้ความระมัดระวังในการฆ่ากระบวนการ โดยเฉพาะอย่างยิ่งกับสัญญาณ SIGKILL เนื่องจากอาจทำให้เกิดผลข้างเคียงที่ไม่พึงประสงค์ เพราะคุณคงไม่อยากทำให้ระบบไม่เสถียร
ต้องการดูประสิทธิภาพระบบของคุณบน Linux ให้ละเอียดยิ่งขึ้นหรือไม่? คุณอาจต้องการตรวจสอบการใช้หน่วยความจำของคุณบน Linux ต่อไป หากคุณกังวลเกี่ยวกับความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้น คุณอาจต้องการเปลี่ยนรหัสผ่านบน Linux ด้วยเช่นกัน
ต้องการเปลี่ยนไปใช้การแจกจ่าย Linux ใหม่หรือไม่? หากคุณเป็นมือใหม่ ให้พิจารณา Linux Mint เป็นทางเลือกที่ปลอดภัยและมั่นคง