กระบวนการซอมบี้คืออะไร:
เป็นกระบวนการที่สิ้นสุดลง แต่ไม่ใช่ทั้งหมดที่จะถูกลบออกจากหน่วยความจําทันทีเนื่องจากตัวอธิบายกระบวนการยังคงอยู่ในหน่วยความจํา
พฤติกรรมปกติของกระบวนการควรเป็นอย่างไร:
เมื่อกระบวนการสิ้นสุดลง สถานะของกระบวนการจะกลายเป็น
EXIT_ZOMBIE
และผู้ปกครองของกระบวนการได้รับแจ้งว่ากระบวนการย่อยได้ตายพร้อมกับ
SIGCHLD
สัญญาณ
กระบวนการหลักควรจะเรียกใช้
wait()
สําหรับการเรียกระบบเพื่ออ่านสถานะการออกของกระบวนการที่ตายแล้วและข้อมูลอื่นๆ หลัง
wait()
เรียกว่ากระบวนการซอมบี้จะถูกลบออกจากหน่วยความจํา สิ่งนี้เกิดขึ้นอย่างรวดเร็ว ดังนั้นคุณจึงไม่เห็นกระบวนการซอมบี้สะสมในระบบของคุณ แต่ในกรณีที่เราเห็นกระบวนการซอมบี้หลายกระบวนการสะสมนี่เป็นสถานการณ์ที่รหัสโปรแกรมไม่มีประสิทธิภาพ
วิธีค้นหากระบวนการซอมบี้:
การเรียกใช้คําสั่ง
top
การเรียกใช้คําสั่ง
ps -ef | grep defunct
วิธียุติกระบวนการสะสมซอมบี้:
โดยส่วนใหญ่แล้ว กระบวนการซอมบี้จะมี ID กระบวนการ
หลักเดียวกันมีสองวิธีในการลบกระบวนการ:
- ส่ง
SIGCHLD
ส่งสัญญาณไปยังกระบวนการหลัก
สัญญาณนี้บอกกระบวนการหลักให้เรียกใช้ wait()
ระบบเรียกและล้างลูกซอมบี้:
kill -s SIGCHLD <PPID>
ตัวอย่าง:
kill -s SIGCHLD 2201
kill -9 <PPID>
ตัวอย่าง:
kill -9 2201