วิธีฆ่ากระบวนการ Linux โดยใช้หมายเลขพอร์ต


คุณเคยพบกับสถานการณ์ที่คุณต้องหยุดกระบวนการที่ทำงานบนพอร์ตเฉพาะบนเครื่อง Linux ของคุณหรือไม่

คุณอาจกังวลว่าแอปพลิเคชันที่คุณใช้งานอยู่ทำงานผิดปกติหรือใช้ทรัพยากรเครือข่ายหรือพลังงาน CPU ในเครื่องมากเกินไป แอปพลิเคชันดังกล่าวอาจเป็นภัยคุกคามความปลอดภัยที่คุณต้องการกำจัด

ไม่ว่าจะด้วยเหตุผลใดก็ตาม คุณสามารถใช้คำสั่ง fuser,lsofและ netstatจากเทอร์มินัล (พร้อมกับ kill) เพื่อช่วยคุณค้นหาและฆ่ากระบวนการ Linux ใด ๆ โดยใช้หมายเลขพอร์ต คำสั่งเหล่านี้จะทำงานได้บนระบบปฏิบัติการ Linux ส่วนใหญ่ รวมถึง Ubuntu ด้วย

วิธีการฆ่ากระบวนการ Linux โดยใช้คำสั่ง fuser

วิธีที่ง่ายที่สุดวิธีหนึ่งในการปิดกระบวนการโดยใช้หมายเลขพอร์ตคือการใช้คำสั่ง fuserคำสั่งเทอร์มินัล Linux นี้สามารถแสดงรายการหรือฆ่ากระบวนการที่เข้าถึงไฟล์หรือซ็อกเก็ต หากแอปทำงานโดยมีกิจกรรมเครือข่าย (และใช้พอร์ตแบบเปิด) แอปนั้นอาจกำลังทำสิ่งใดสิ่งหนึ่งจากสองสิ่งนี้

ก่อนที่จะดำเนินการต่อ คุณจะต้องตรวจสอบให้แน่ใจว่าคุณพอใจกับการใช้เทอร์มินัลบรรทัดคำสั่งบน Linux PC ของคุณ

ในการแสดงรายการกระบวนการที่ใช้หมายเลขพอร์ตโดยใช้ fuserคุณสามารถใช้ไวยากรณ์ต่อไปนี้:

พอร์ตโปรโตคอล fuser -n

ในตัวอย่างนี้ โปรโตคอลสามารถเป็น tcpหรือ udpในขณะที่ พอร์ตคือหมายเลขพอร์ตที่คุณต้องการ เพื่อตรวจสอบ. ตัวอย่างเช่น หากต้องการดูว่ากระบวนการใดใช้พอร์ต TCP 80 คุณสามารถเรียกใช้:

ฟิวเซอร์ -n tcp 80

การดำเนินการนี้จะพิมพ์ ID กระบวนการ (PID) ของกระบวนการที่ใช้พอร์ตนั้น

หากต้องการหยุดกระบวนการเหล่านั้น คุณสามารถเพิ่มตัวเลือก -kใน fuserการดำเนินการนี้จะส่งสัญญาณ SIGTERM ไปยังแต่ละกระบวนการ โดยขอให้ยุติอย่างสง่างาม ตัวอย่างเช่น:

ฟิวเซอร์ -k -n tcp 80

การดำเนินการนี้จะฆ่ากระบวนการทั้งหมดที่ใช้พอร์ต TCP 80

หากกระบวนการบางอย่างไม่ตอบสนองต่อ SIGTERM คุณสามารถใช้ -KILLแทน -kสิ่งนี้จะส่งสัญญาณการฆ่า (SIGKILL) ซึ่งสามารถช่วยบังคับให้กระบวนการที่กำลังทำงานอยู่ที่คุณระบุให้ยุติทันที อย่างไรก็ตาม สิ่งนี้อาจทำให้ข้อมูลสูญหายหรือเสียหายได้ ดังนั้นควรใช้ด้วยความระมัดระวัง ตัวอย่างเช่น:.

ฟิวเซอร์ -KILL -n tcp 80

การดำเนินการนี้จะฆ่ากระบวนการทั้งหมดที่ใช้พอร์ต TCP 80 อย่างรุนแรง หากคุณพบปัญหาใดๆ ให้เรียกใช้คำสั่งเหล่านี้ในฐานะผู้ใช้ขั้นสูง (โดยใช้คำสั่ง sudo) หรือโดยใช้ผู้ใช้ rootแทน

วิธีการปิดกระบวนการ 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 เป็นทางเลือกที่ปลอดภัยและมั่นคง.

.

กระทู้ที่เกี่ยวข้อง:


2.04.2023