กระบวนการซอมบี้สร้างขึ้นในระบบ Unix / Linux เราสามารถลบออกได้ผ่านkillคำสั่ง
แต่จะมีกลไกการล้างข้อมูลในตัวใน Linux เพื่อจัดการกับกระบวนการซอมบี้หรือไม่?
กระบวนการซอมบี้สร้างขึ้นในระบบ Unix / Linux เราสามารถลบออกได้ผ่านkillคำสั่ง
แต่จะมีกลไกการล้างข้อมูลในตัวใน Linux เพื่อจัดการกับกระบวนการซอมบี้หรือไม่?
คำตอบ:
กระบวนการซอมบี้ตายไปแล้ว คุณไม่สามารถฆ่าพวกเขา การเรียกใช้killคำสั่งหรือระบบไม่มีผลต่อกระบวนการซอมบี้ (คุณสามารถทำให้ซอมบี้หายไปได้killแต่คุณต้องยิงผู้ปกครองไม่ใช่ซอมบี้อย่างที่เราจะเห็นในไม่กี่นาที)
กระบวนการซอมบี้ไม่ใช่กระบวนการจริงๆมันเป็นเพียงรายการในตารางกระบวนการ ไม่มีทรัพยากรอื่น ๆ ที่เกี่ยวข้องกับกระบวนการ zombie: ไม่มีหน่วยความจำหรือรหัสที่ทำงานอยู่ไม่มีการเปิดไฟล์ใด ๆ ฯลฯ
เมื่อกระบวนการตายสิ่งสุดท้ายที่ต้องดำเนินการหลังจากทำความสะอาดทรัพยากรอื่น ๆ ทั้งหมดแล้วคือรายการในตารางกระบวนการ รายการนี้ถูกเก็บไว้รอบ ๆ ก่อตัวเป็นซอมบี้เพื่อให้กระบวนการผู้ปกครองสามารถติดตามสถานะการออกของเด็ก ผู้ปกครองอ่านสถานะการออกโดยการเรียกหนึ่งในwaitตระกูลของ syscalls ณ จุดนี้ซอมบี้หายไป waitมีการกล่าวกันว่าการเรียกร้องให้เด็กเก็บเกี่ยวการขยายคำอุปมาของซอมบี้ที่ตายไปแล้ว แต่ก็ยังไม่ได้รับการประมวลผลอย่างสมบูรณ์ในชีวิตหลังความตาย พาเรนต์ยังสามารถระบุว่าไม่สนใจ (โดยละเว้นสัญญาณ SIGCHLD หรือการโทรsigactionด้วยSA_NOCLDWAITแฟล็ก) ซึ่งในกรณีนี้รายการในตารางกระบวนการจะถูกลบทันทีเมื่อเด็กตาย
ดังนั้นผีดิบเพียงเกิดขึ้นเมื่อกระบวนการได้ตายและแม่ของมันยังไม่ได้เรียกว่าwaitยัง สถานะนี้สามารถใช้ได้นานตราบเท่าที่ผู้ปกครองยังคงทำงานอยู่ ถ้าตายก่อนที่เด็กผู้ปกครองหรือตายโดยไม่ต้องอ่านสถานะของเด็ก, การปกครองของผีดิบที่ถูกกำหนดเป็นกระบวนการที่มี PID 1 initซึ่งเป็น หนึ่งในงานของinitคือการเรียกwaitในวงและเก็บเกี่ยวกระบวนการซอมบี้ใด ๆ ที่เหลือโดยผู้ปกครองของมัน
คุณไม่ใช่killกระบวนการซอมบี้เพราะมันตายไปแล้ว
waitพ่อแม่จะต้องดำเนินการกระบวนการซอมบี้เพื่อที่จะได้รับสถานะการออก
"กลไกการล้างข้อมูลในตัวเท่านั้น" ที่มีใน Linux ใช้งานได้กับกรณีที่กระบวนการหลักใด ๆ ตายก่อนที่จะรวบรวมสถานะการออกของเด็ก ในกรณีนี้เด็กแต่ละคนได้รับมรดกโดยinitกระบวนการซึ่งจะwaitอยู่ในเด็กรวบรวมสถานะการออกและลบรายการในตารางกระบวนการ
ทันทีที่ผู้ปกครองของกระบวนการตายกระบวนการจะกลายเป็นเด็กกำพร้าโดยไม่สนใจว่าเป็นซอมบี้หรือไม่ เกิดอะไรขึ้นกับเด็กกำพร้า initพวกเขาได้รับเป็นผู้ปกครองใหม่ที่เรียกว่า initจะwaitในแต่ละกำพร้าที่รวบรวมดังนั้นจึงเก็บเกี่ยวเด็กกำพร้า (ที่อาจเป็นซอมบี้ด้วย)
ไม่ไม่มีกลไกการทำความสะอาดสำหรับซอมบี้ ซอมบี้ไปสู่สวรรค์ของซอมบี้เมื่อผู้ปกครองถูกฆ่าตาย จนกว่าจะถึงตอนนั้นระบบปฏิบัติการยังคงให้พวกเขากลับสถานะทางออกไปยังผู้ปกครอง
initไม่ฆ่ากระบวนการใด ๆ มี แต่waitเด็ก ๆ เท่านั้นที่จะรวบรวมสถานะได้