วิธีการกระบวนการฆ่าซอมบี้บนลินุกซ์

Nov 25, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock

โปรแกรมที่เขียนไม่ดีหรือการแสดงไม่ดีสามารถออกไปได้ กระบวนการซอมบี้ ซุ่มซ่อนอยู่ในคอมพิวเตอร์ Linux ของคุณ ค้นหาว่าซอมบี้สร้างขึ้นอย่างไรและในที่สุดคุณสามารถวางพวกเขาเพื่อพักผ่อนได้อย่างไร

กระบวนการของกระบวนการทำงานอย่างไรกับ Linux

แน่นอน Linux แน่นอนต้องติดตามแอปพลิเคชันทั้งหมดและ Daemons ที่ทำงานบนคอมพิวเตอร์ของคุณ หนึ่งในวิธีที่มันทำเช่นนี้คือการรักษาตารางกระบวนการ นี่คือรายการของโครงสร้างในหน่วยความจำเคอร์เนล แต่ละกระบวนการมีรายการในรายการนี้ที่มีข้อมูลบางอย่างเกี่ยวกับมัน

ไม่มีข้อตกลงที่สำคัญในแต่ละโครงสร้างโต๊ะกระบวนการ พวกเขาถือ รหัสกระบวนการ , รายการข้อมูลอื่น ๆ สองสามรายการและตัวชี้ไปยังบล็อกการควบคุมกระบวนการ (PCB) สำหรับกระบวนการนั้น

มันเป็น PCB ที่มีรายละเอียดมากมาย Linux จำเป็นต้องค้นหาหรือตั้งค่าสำหรับแต่ละกระบวนการ PCB ได้รับการอัปเดตเป็นกระบวนการที่สร้างขึ้นเนื่องจากเวลาในการประมวลผลและทำลายในที่สุด

Linux PCB มีมากกว่า 95 ฟิลด์ มันถูกกำหนดไว้ เป็นโครงสร้างที่เรียกว่า task_sruct.h และมีความยาวมากกว่า 700 เส้น PCB มีข้อมูลประเภทต่อไปนี้:

  • สถานะกระบวนการ : รัฐต่าง ๆ อธิบายไว้ด้านล่าง
  • หมายเลขกระบวนการ : ตัวระบุที่เป็นเอกลักษณ์ในระบบปฏิบัติการ
  • โปรแกรมเคาน์เตอร์โปรแกรม : เมื่อกระบวนการนี้มีการเข้าถึงซีพียูต่อไประบบจะใช้ที่อยู่นี้เพื่อค้นหาคำสั่งถัดไปของกระบวนการที่ควรดำเนินการ
  • การลงทะเบียน : รายการของ CPU registers ที่ใช้โดยกระบวนการนี้ รายการอาจมีการสะสมดัชนีลงทะเบียนและพอยน์เตอร์สแต็ค
  • เปิดรายการไฟล์ : ไฟล์ที่เกี่ยวข้องกับกระบวนการนี้
  • ข้อมูลการตั้งเวลา CPU : ใช้เพื่อกำหนดวิธีการที่บ่อยครั้งและระยะเวลาการประมวลผล CPU จะมอบให้กับกระบวนการนี้ ลำดับความสำคัญของกระบวนการชี้ไปที่คิวการตั้งเวลาและพารามิเตอร์การตั้งเวลาอื่น ๆ จะต้องบันทึกใน PCB
  • ข้อมูลการจัดการหน่วยความจำ : รายละเอียดเกี่ยวกับหน่วยความจำกระบวนการนี้ใช้เช่นที่อยู่เริ่มต้นและสิ้นสุดของหน่วยความจำกระบวนการและพอยน์เตอร์ไปยังหน้าหน่วยความจำ
  • ข้อมูลสถานะ I / O : อุปกรณ์ใด ๆ ในหรือเอาต์พุตที่ใช้โดยกระบวนการ

"สถานะกระบวนการ" อาจเป็นสิ่งใดต่อไปนี้:

  • NS: กระบวนการทำงานหรือ runnable การใช้งานหมายถึงการได้รับรอบ CPU และการดำเนินการ กระบวนการที่ใช้ runnable พร้อมที่จะทำงานและรอช่องเสียบ CPU
  • NS: กระบวนการนอนหลับ กระบวนการกำลังรอการดำเนินการให้เสร็จสมบูรณ์เช่นการดำเนินการในหรือเอาต์พุตหรือสำหรับทรัพยากรที่จะใช้งานได้
  • NS: กระบวนการอยู่ในสถานะการนอนหลับที่ไม่ต่อเนื่อง มันใช้การเรียกระบบการปิดกั้นและไม่สามารถดำเนินการต่อได้จนกว่าการเรียกระบบจะเสร็จสมบูรณ์ ซึ่งแตกต่างจากสถานะ "นอนหลับ" กระบวนการในสถานะนี้จะไม่ตอบสนองต่อสัญญาณจนกว่าการเรียกระบบจะเสร็จสมบูรณ์และการดำเนินการได้กลับไปที่กระบวนการ
  • NS: กระบวนการสิ้นสุดลง (หยุด) เพราะมันได้รับ sigstop สัญญาณ. มัน จะตอบสนองเท่านั้น ไปที่ sigkill หรือ sigcont สัญญาณซึ่งฆ่ากระบวนการหรือสั่งให้ดำเนินการต่อตามลำดับ นี่คือสิ่งที่เกิดขึ้นเมื่อคุณสลับจาก เบื้องหน้า ( fg ) ถึง พื้นหลัง ( bg) งาน.
  • Z: กระบวนการซอมบี้ เมื่อกระบวนการเสร็จสมบูรณ์มันไม่เพียง แต่หายไป มันทำให้หน่วยความจำเพิ่มขึ้นและลบตัวเองออกจากหน่วยความจำ แต่รายการในตารางกระบวนการและ PCB ยังคงอยู่ สถานะของมันถูกตั้งค่าเป็น exit_zombie และกระบวนการหลักจะได้รับแจ้ง (โดย sigchld สัญญาณ) ว่ากระบวนการเด็กเสร็จสิ้น

ในสถานะซอมบี้กระบวนการผู้ปกครองเรียกหนึ่งใน รอ() ครอบครัวของฟังก์ชั่น เมื่อกระบวนการเด็กจะถูกสร้างขึ้น จากนั้นก็รอให้มีการเปลี่ยนแปลงของรัฐในกระบวนการเด็ก ได้กระบวนการเด็กถูกหยุดต่อเนื่องหรือถูกฆ่าตายโดยสัญญาณ? มันมีการยกเลิกโดยวิ่งผ่านเสร็จสิ้นตามธรรมชาติของรหัสของตนหรือไม่

ถ้าเปลี่ยนสถานะเป็นหนึ่งในที่หมายถึงกระบวนการเด็กได้หยุดการทำงานรหัสทางออกของมันคือการอ่าน จากนั้น PCB ของเด็กที่ถูกทำลายและเข้าในตารางกระบวนการจะถูกลบออก อุดมคตินี้ทั้งหมดที่เกิดขึ้นในพริบตาและกระบวนการในรัฐผีดิบไม่อยู่นานมาก

ที่เกี่ยวข้อง: วิธีการเรียกใช้และการควบคุมกระบวนการพื้นหลังบน Linux

สิ่งที่ทำให้เกิดกระบวนการผีดิบบนลินุกซ์?

กระบวนการปกครองเขียนไม่ดีอาจจะไม่เรียก รอ() ฟังก์ชั่นเมื่อกระบวนการเด็กจะถูกสร้างขึ้น นี้ไม่มีอะไรหมายถึงจะดูการเปลี่ยนแปลงของรัฐในกระบวนการเด็กและ sigchld สัญญาณจะถูกละเว้น หรือบางทีโปรแกรมอื่นมีผลกระทบต่อการดำเนินการของการปกครองอย่างใดอย่างหนึ่งเกิดจากการเขียนโปรแกรมที่ไม่ดีหรือเจตนาร้าย

แต่ถ้าการปกครองที่ไม่ได้เฝ้าดูการเปลี่ยนแปลงของรัฐในกระบวนการเด็กที่ดูแลทำความสะอาดระบบที่เหมาะสมจะไม่เกิดขึ้น PCB และรายการในตารางขั้นตอนที่จะไม่ถูกลบเมื่อสิ้นสุดกระบวนการเด็ก ผลนี้ในรัฐผีดิบไม่เคยถูกลบออกจากแผ่น PCB

ซอมบี้จะใช้บิตของหน่วยความจำ แต่พวกเขามักจะไม่ก่อให้เกิดปัญหา รายการในตารางกระบวนการที่มีขนาดเล็ก แต่จนกว่าจะมีการปล่อยตัวกระบวนการ ID ไม่สามารถนำกลับมาใช้ บนระบบปฏิบัติการ 64 บิตที่ไม่น่าจะก่อให้เกิดปัญหาใด ๆ เพราะแผ่น PCB มีขนาดใหญ่กว่ารายการตารางกระบวนการ

จำนวนมากของซอมบี้สามารถ, น่ากลัวส่งผลกระทบต่อปริมาณของหน่วยความจำที่ฟรีสำหรับกระบวนการอื่น ๆ หากคุณมีที่ซอมบี้มากแม้ว่าคุณได้มีปัญหาร้ายแรงกับแอพลิเคชันที่ผู้ปกครองหรือข้อผิดพลาดของระบบปฏิบัติการ

วิธีการลบกระบวนการผีดิบ

คุณไม่สามารถฆ่ากระบวนการผีดิบเพราะมันตายไปแล้ว มันจะไม่ตอบสนองต่อสัญญาณใด ๆ เพราะมันถูกลบออกจากหน่วยความจำมีไม่มีที่ไหนเลยที่จะส่ง sigkill สัญญาณ. คุณสามารถลองส่ง sigchld สัญญาณการปกครอง แต่ถ้ามันไม่ได้ทำงานเมื่อกระบวนการเด็กยกเลิกก็ไม่น่าที่จะทำงานในขณะนี้อย่างใดอย่างหนึ่ง

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

NS ในนั้น ขั้นตอนการดำเนินการเป็นประจำล้างจำเป็นของซอมบี้เพื่อที่จะฆ่าพวกเขาคุณเพียงแค่ต้องฆ่ากระบวนการที่สร้างพวกเขา NS สูงสุด คำสั่งเป็นวิธีที่สะดวกในการดูว่าคุณมีซอมบี้ใด ๆ

พิมพ์ต่อไปนี้:

  บน  

ระบบนี้มีแปดกระบวนการผีดิบ เรา สามารถแสดงรายการเหล่านี้ โดยใช้ ป.ล. สั่งการ และลงในท่อ egrep . อีกครั้งกระบวนการผีดิบมีธงของรัฐ“Z” และคุณจะมักจะยังดูที่“ตาย”.

พิมพ์ต่อไปนี้:

 PS aux | egrep "Z | ตาย" 

กระบวนการผีดิบมีการระบุไว้

นี้เป็นวิธีที่ neater เพื่อค้นพบรหัสกระบวนการของซอมบี้กว่าการเลื่อนไปมาผ่าน สูงสุด . นอกจากนี้เรายังเห็นว่าโปรแกรมที่เรียกว่า“badprg” กลับกลายเหล่าซอมบี้

กระบวนการ ID ของผีดิบแรกคือ 7641 แต่เราต้องไปหากระบวนการ ID ของกระบวนการแม่ของมัน เราสามารถทำได้โดยการใช้ ป.ล. อีกครั้ง. เราจะใช้ตัวเลือกการส่งออก ( -o ) บอก ป.ล. เพื่อแสดงเฉพาะกระบวนการ ID ของผู้ปกครองแล้วผ่านมันไปด้วย PPID = ธง.

กระบวนการที่เราต้องการที่จะหาจะถูกระบุโดยใช้ -NS (กระบวนการ) ตัวเลือกและจากนั้นผ่านกระบวนการ ID ของผีดิบ

ดังนั้นเราพิมพ์คำสั่งต่อไปนี้เพื่อค้นหาข้อมูลกระบวนการสำหรับกระบวนการ 7641 แต่มันจะรายงานเฉพาะ ID ของกระบวนการปกครอง:

 PS -o PPID = -p 7641 

เรากำลังบอกว่ารหัสการปกครองเป็น 7636. ตอนนี้เราสามารถข้ามอ้างอิงนี้โดยใช้ ป.ล. อีกที.

เราเห็นว่าสิ่งนี้ตรงกับชื่อของกระบวนการหลักตั้งแต่ก่อนหน้านี้ ในการฆ่ากระบวนการหลักให้ใช้ตัวเลือก sigkill กับคำสั่ง kill ดังต่อไปนี้:

 Kill -sigkill 7636 

ขึ้นอยู่กับเจ้าของกระบวนการหลักคุณอาจต้องใช้ sudo .

ซอมบี้ไม่น่ากลัว ...

... เว้นแต่พวกเขาจะอยู่ในฝูงชนขนาดใหญ่ ไม่กี่คนที่ไม่ต้องกังวลและการรีบูตอย่างง่าย ๆ จะเช็ดออก

อย่างไรก็ตามหากคุณสังเกตเห็นว่าแอปพลิเคชันหรือกระบวนการเป็นซอมบี้ที่วางไข่เสมอนั่นคือสิ่งที่คุณควรพิจารณา เป็นไปได้มากว่าเป็นเพียงโปรแกรมที่เขียนด้วย Sloppily ซึ่งในกรณีนี้อาจมีรุ่นที่อัปเดตที่ชำระเงินอย่างถูกต้องหลังจากกระบวนการลูก


Linux - บทความยอดนิยม

วิธีบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านของพวกเขาบน Linux

Linux Nov 4, 2025

Ilya Titchev / Shutterstock รหัสผ่านเป็นหลักสำคัญในการรักษาความปลอดภัยบ�..


วิธีใช้เบราว์เซอร์ DB สำหรับ SQLite บน Linux

Linux Dec 16, 2025

Fatmawati Achmad Zaenuri / Shutterstock เบราว์เซอร์ DB สำหรับ SQLite ให้คุณดูและแก้ไ�..


มีอะไรใหม่ใน GNOME 40

Linux Jul 23, 2025

มูลนิธิ GNOME GNOME 40 มีมากกว่าโครงการหมายเลขใหม่ พร้อมกับรูปล�..


มีอะไรใหม่ใน Debian 11“เป้า”

Linux Jul 22, 2025

เดเบียน , กำเนิดของการแจกแจง Linux อื่น ๆ อีกมากมายได้ทำการเปิดตัว 11..


เล่นเกมพื้นเมืองบน Linux อาจจะตายและไม่เป็นไร

Linux Sep 27, 2025

DC Studio / Shutterstock.com NS ดาดฟ้าอบไอน้ำ ประกาศในเดือนสิงหาคม 2021 มีล�..


ข้อเสียของการสลับไปที่ Linux คืออะไร

Linux Oct 27, 2025

Larry Ewing และ Gimp รจนาลินุกซ์ (เหมือนตัวเอง) มีความรวดเร็วในการช..


KDE Connect มาถึง iPhone

Linux Oct 26, 2025

kde หากคุณกำลังมองหาวิธีง่ายๆในการทำให้ iPhone ของคุณเล่นได้ดีกั�..


มีอะไรใหม่ใน Fedora 35

Linux Nov 2, 2025

Fedora 35, หมวกสีแดง ฟรี การกระจายลินุกซ์ (distro) ได้รับการปล่อยตัวใน�..


หมวดหมู่