กระบวนการซอมบี้คืออะไรและฉันจะฆ่ามันได้อย่างไร


คำตอบ:


17

โอ้พระเจ้า! ไม่ไม่ไม่. อย่าใช้ kill -9

มันไม่ได้ให้โอกาสในการทำความสะอาด:

  1. ปิดการเชื่อมต่อซ็อกเก็ต

  2. ล้างไฟล์ temp

  3. แจ้งให้ลูกหลานทราบว่ากำลังจะออกไป

  4. รีเซ็ตคุณสมบัติของเทอร์มินัลและอื่น ๆ และอื่น ๆ

โดยทั่วไปแล้วส่ง 15 และรอสักครู่หรือสองวินาทีและถ้านั่นไม่ได้ผลให้ส่ง 2 และถ้าไม่ได้ผลให้ส่ง 1 หากไม่ได้โปรดลบไบนารีเพราะโปรแกรมทำงานผิดปกติ!

อย่าใช้ kill -9 อย่านำเครื่องเกี่ยวนวดเข้าด้วยกันเพื่อทำความสะอาดกระถาง


13
kill -9 จะไม่ฆ่า zombies คุณต้องฆ่าพ่อแม่ของพวกเขาดูที่ pstree
LapTop006

3
@ LapTop006: ในกรณีนี้พวกเขาเหมือนแวมไพร์มากขึ้น ฆ่าแวมไพร์หัวเพื่อหยุดการบุกรุก
แอมเฟตามาจิน

2
คำตอบนี้ผิดทุกทาง กระบวนการเสร็จสมบูรณ์ มันได้ปิดการเชื่อมต่อแล้วล้างไฟล์ temp และอื่น ๆ ฯลฯ ไม่มีกระบวนการจริงอีกต่อไปเพียงแค่รายการในตารางกระบวนการ อย่าลบไบนารีเด็ก - มันไม่ได้ทำงานไม่ดี นั่นหมายความว่าผู้ปกครองยังไม่ได้จัดงานศพให้ลูกอย่างเหมาะสม
เคนวิลเลียมส์

19

กระบวนการซอมบี้ (ที่จริงแล้วตอนนี้พวกเขาถูกเรียกว่า<defunct>) ไม่ใช่กระบวนการจริงๆ มันเป็นเพียงรายการในตารางกระบวนการดังนั้นกระบวนการหลักสามารถทำwait()syscallได้

คุณไม่ควรกังวลเกี่ยวกับพวกเขา พวกเขาไม่ได้ครอบครองทรัพยากรใด ๆ พวกเขาจะหายไปอย่างใดอย่างหนึ่งเมื่อผู้ปกครองของพวกเขาเรียกwait()เมื่อพ่อแม่ตัวเองตาย


9

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

นี่คือ บาง คำแนะนำเกี่ยวกับการกำจัดของพวกเขา


9

มีคำตอบที่ยอมรับแล้ว: คุณสามารถฆ่ากระบวนการซอมบี้ได้ แนบกับดีบักเกอร์กับกระบวนการหลักและเรียกใช้ฟังก์ชัน waitpid เช่น: - สมมติว่าผู้ปกครองมี PID = 100, กระบวนการซอมบี้มี PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

น่าสนใจ ฉันจะลองสิ่งนี้
ewwhite

8

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

คุณสามารถลองและบังคับให้ผู้ปกครองทำเช่นนี้หากคุณต้องการโดยส่ง SIGCHLD ( kill -20) ไปยังผู้ปกครอง แต่ไม่มีการรับประกันว่าผู้ปกครองจะให้เกียรติ

คุณมักจะเห็นพวกเขาในช่วงเวลาสั้น ๆ (เช่นในขณะที่ดูแผนผังกระบวนการโดยใช้อันดับต้น ๆ ) - นี่เป็นเรื่องปกติ ในชิ้นเวลาระหว่างเวลาที่กระบวนการเด็กเสร็จสมบูรณ์และผู้ปกครองสำรวจความคิดเห็น - กระบวนการเด็กจะปรากฏเป็นซอมบี้

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

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

เรามีนักพัฒนาเส็งเคร็งจำนวนมากที่ฉันทำงานอยู่และดังนั้นฉันจึงมีสิทธิ์พิเศษในการจัดการกับปัญหาดังกล่าวและเรียนรู้สิ่งที่ไร้ประโยชน์ทุกประเภทในขณะที่ทำเช่นนั้น ในความเป็นจริง - ทีมของฉันมักจะใช้สคริปต์เปลือกเส็งเคร็งที่เขียนโดยนักพัฒนาเส็งเคร็งในการสัมภาษณ์ - ถ้าผู้สมัครสามารถเลือกได้ว่าสคริปต์นั้นน่ารังเกียจจริง ๆ และบอกเราว่าทำไมมันถึงเส็งเคร็ง


0

สำหรับปืนลูกซองเสมือนจริง ...

$ shoot <pid>
#! / bin / ดวลจุดโทษ
เหยื่อ = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{พิมพ์ $ 2}' '
เหยื่อ \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {Vict} \ b" | หัว -n 1 | awk '{พิมพ์ $ 2}' '
#kill $ {Vict}
echo "ฆ่า $ {Vict_name}"

และจำไว้ว่าจงยิงพวกมันไว้ในหัวเสมอ


ฉันขอโทษ แต่สำหรับบันทึกแล้วสคริปต์นี้มีคำว่า "ตกเป็นเหยื่อ" และจะฆ่าผู้ปกครองของ PID ที่ให้ไว้ในราคา $ 1 ไม่ว่าในกรณีใดก็ตามพิจารณาว่า PID เป็นซอมบี้ตัวเดียวหรือถ้าเขามีพี่น้อง ฆ่าพ่อและทุกคนในครอบครัวจะต้องพินาศ
Marc Riera

-1

กระบวนการซอมบี้เป็นกระบวนการที่เสร็จสิ้นการดำเนินการ แต่ยังคงอยู่ในตารางกระบวนการ

kill -9 [parent process_name]จะวางมันลงด้วยอคติที่รุนแรง


kill -9 จะไม่ฆ่ากระบวนการซอมบี้นั่นเป็นเหตุผลหนึ่งที่เรียกว่าซอมบี้ "กระบวนการ" ของซอมบี้จะไม่หายไปจนกว่าโค้ดส่งคืนจะถูกประมวลผลโดยกระบวนการหลัก
พ.ค.

3
ไม่ฆ่า -9 ในTHE PARENTจะฆ่าผู้ปกครองทำให้ init เป็นผู้ปกครองซึ่งจะรับรหัสส่งคืนของเด็ก
อลัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.