ฉันควรฆ่ากระบวนการซอมบี้ในระบบของฉันหรือไม่?


20

เนื่องจากฉันเป็นมือใหม่ในระบบ Linux / Unix และเพิ่งอ่านเกี่ยวกับกระบวนการซอมบี้ฉันมีคำถามหนึ่งข้อ ฉันมี 10 คนในตอนนี้ ฉันจำเป็นต้องฆ่าพวกเขาหรือไม่และถ้าใช่ทำไม พวกเขากำลังโหลดระบบของฉันหรือไม่

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
ไม่จำเป็นต้องฆ่าพวกเขา พวกเขาตายไปแล้ว
Marco

2
ดังนั้นพวกเขาจึงไม่โหลดระบบของฉันอีกต่อไป และพวกเขาจะยังคงเป็นเช่นนี้จนกว่าฉันจะรีบูตระบบหรือฉันฆ่าพวกเขาใช่ไหม?
Jason Paddle

7
@Marco: คุณไม่สามารถฆ่าสิ่งที่ตายแล้ว แต่คุณสามารถฆ่าพ่อแม่ของมันได้!
wullxz

7
ปัญหาคือว่าพ่อแม่ไม่ได้เก็บเกี่ยวพวกเขา (เมื่อพวกเขาตาย)
ypercubeᵀᴹ

3
10 ซอมบี้ ??? คุณถูกรบกวน! เรียกใช้ Jason ทำงาน
Luc M

คำตอบ:


29

คุณไม่สามารถฆ่าซอมบี้มันตายไปแล้ว

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


ใช่มันสมเหตุสมผลแล้ว ฉันสามารถฆ่ากระบวนการผู้ปกครอง ขอบคุณสำหรับข้อมูล ฉันแค่อยากรู้ว่ามันโหลดหรือไม่มีระบบ
Jason Paddle

ฉันเชื่อว่ามีขีด จำกัด ของซอมบี้แม้ว่า ฉันคิดว่ามัน 1024 ดังนั้นมันจะไม่เจ็บประสิทธิภาพ แต่ฉันคิดว่ามีจำนวนเพดานที่คุณสามารถมี
ProfessionalAmateur

@ProfessionalAmateur จะเกิดอะไรขึ้นถ้าคุณมีจำนวน จำกัด ของซอมบี้ (1024 หรืออะไรก็ตาม)
Roddy ของ Peas แช่แข็ง

@RoddyoftheFrozenPeas - พูดตามตรงฉันไม่แน่ใจว่าฉันทำความสะอาดพวกเขาเสมอก่อนที่จะถึงจุดนั้น ฉันคิดว่าระบบจะพยายามสร้างซอมบี้อีกตัวและอาจมีการละเมิดหน่วยความจำหรือข้อผิดพลาดอื่น ๆ ที่ยากเกินความจำเป็นหรือการแบ่งกลุ่มบางส่วน
ProfessionalAmateur

2
@ProfessionalAmateur: ไม่มีขีด จำกัด ของซอมบี้ใน linux Zombie PID อยู่ภายใต้/proc/sys/kernel/pid_maxเช่นเดียวกับ PID อื่น ๆ
rsaw

16

อะไรคือกระบวนการซอมบี้ที่ปรากฏใน ps ฉันฆ่าพวกเขา แต่พวกเขาไม่ได้ไป!

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

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

หากคุณมีกระบวนการซอมบี้หมายความว่าซอมบี้เหล่านั้นไม่ได้รอโดยผู้ปกครอง (ดู PPID ที่แสดงโดย ps -l) คุณมีสามตัวเลือก: แก้ไขกระบวนการหลัก (ทำให้รอ); ฆ่าผู้ปกครอง; หรืออยู่กับมัน โปรดจำไว้ว่าการใช้ชีวิตกับมันไม่ยากนักเพราะซอมบี้ใช้สายพิเศษมากกว่าหนึ่งเส้นในเอาต์พุตของ ps

ที่มา: http://www.linuxsa.org.au/tips/zombies.html

และในกรณีที่คุณกำลังสนุกสนานกับการฆ่าเธรด superuser นี้อาจน่าสนใจสำหรับคุณ: คุณจะพบกระบวนการหลักของกระบวนการซอมบี้ได้อย่างไร


โปรดทราบว่าการแก้ไขพาเรนต์อาจเกินความเป็นไปได้ - บางทีมันอาจจะยังไม่ถึงจุดที่เด็ก ๆ จะต้องรอ บางทีมันอาจจะทำในภายหลัง (หรือใช่อาจจะไม่)
Romain

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

7

คุณไม่จำเป็นต้องฆ่าพวกเขา

เพื่อสร้างความเข้าใจพื้นฐาน:

ทุกกระบวนการเป็นลูกของกระบวนการหลัก (ยกเว้นสำหรับกระบวนการเริ่มต้น แต่เราไม่จำเป็นต้องกังวลเกี่ยวกับกระบวนการนั้น)

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

กระบวนการลูกเสร็จแล้วค้างในตารางกระบวนการเป็นกระบวนการซอมบี้จนกว่ากระบวนการแม่ "reaps" หรือรอกระบวนการเด็กซึ่งเป็นเพียงกระบวนการผู้ปกครองบอกระบบปฏิบัติการที่ไม่ต้องการกระบวนการเด็กอีกต่อไป; มันได้อ่านค่าตอบแทนใด ๆ ที่มันต้องการและจะทำกับมัน ณ จุดนี้ระบบจะล้างข้อมูลในตารางกระบวนการ


3

กระบวนการนี้ไม่จำเป็นต้องถูกฆ่า

ในกรณีที่คุณต้องการฆ่ามัน (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) ให้แน่ใจว่าคุณยิงที่หัวนี่คือคำสั่งที่มีประโยชน์:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

จากhttps://www.erianna.com/kill-a-linux-zombie-process


1
+1 shoot at the headสำหรับ
BenjiWiebe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.