กระบวนการซอมบี้สร้างขึ้นในระบบ 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
เด็ก ๆ เท่านั้นที่จะรวบรวมสถานะได้