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

Nov 25, 2024
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 ด้วย TestDisk

Linux Nov 18, 2024

Fatmawati Achmad Zaenuri / Shutterstock คุณเคยลบไฟล์และเสียใจทันทีหรือไม่ คุณต้อ�..


วิธีการติดตั้งสัญญาณสก์ท็อปบนลินุกซ์

Linux Jan 22, 2025

Eliseu Geisler / Shutterstock.com สัญญาณ เป็น แอปส่งข้อความสมาร์ทโฟนที่�..


วิธีการซ่อนทั้งหมด Desktop ไอคอนบน Mac

Linux Jun 23, 2025

Krisda / Shutterstock เดสก์ท็อป Mac ของคุณเป็นระเบียบหรือไม่? ไม่ต้องการ�..


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

Linux Sep 27, 2025

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


วิธีเพิ่มผู้ใช้ในไฟล์ sudoers ใน Linux

Linux Oct 30, 2025

ถ้า Sudo คำสั่งบน Linux ทำให้คุณได้รับข้อความว่าผู้ใช้“ ไม่ได้อยู่ในไฟ..


5 คุณสมบัติ Ubuntu Linux ที่คุณควรใช้

Linux Dec 6, 2024

Ubuntu Linux เป็นคุณสมบัติที่หลากหลายและมาพร้อมกับการเลือกซอฟต์แวร์ที่ติด..


วิธีแสดงรายการตัวแปรสภาพแวดล้อมบน Linux

Linux Oct 31, 2025

บน Linux ตัวแปรสภาพแวดล้อมมีค่าและการตั้งค่าที่สำคัญ สคริปต์แอปพลิเคช�..


วิธีรับ IP สาธารณะของคุณในสคริปต์ Linux Bash

Linux Nov 9, 2024

คุณจะต้องใช้ที่อยู่ IP ภายนอกของคุณหากคุณต้องการเชื่อมต่อกับคอมพิวเ..


หมวดหมู่