อ่านรายการจาก Elav ฉันจำได้ว่าในฟอรัมมีคนขอความช่วยเหลือเนื่องจากระบบของพวกเขาทำงานช้าโซลูชันบางอย่างเน้นที่กระบวนการ
สถานะหลักของกระบวนการใน Linux คือ:
นอน (S) : กระบวนการที่กำลังรอให้ถึงเวลาดำเนินการ
วิ่ง (R) : กระบวนการที่กำลังทำงาน
กำลังรอ (D) : กระบวนการที่รอให้การดำเนินการเข้า / ออกเสร็จสมบูรณ์
ซอมบี้ (Z) : กระบวนการที่สิ้นสุดลง แต่ยังคงปรากฏในตารางกระบวนการ อาจเกิดจากข้อผิดพลาดในการเขียนโปรแกรมและอาจเป็นอาการของระบบที่ทำงานช้าหรือทำให้เกิดปัญหา
กระบวนการซอมบี้เป็นกระบวนการที่ไม่เคยได้รับสัญญาณจากกระบวนการแม่ที่สร้างขึ้นกระบวนการลูกคือกระบวนการที่มีต้นกำเนิดในกระบวนการระดับสูงกว่าที่เรียกว่ากระบวนการแม่ที่รับผิดชอบในการส่งสัญญาณไปยังกระบวนการลูก สร้างขึ้นเพื่อระบุว่าช่วงชีวิตของพวกเขาสิ้นสุดลงแล้ว
อาจเกิดจากข้อผิดพลาดในการเขียนโปรแกรมและอาจเป็นอาการของระบบที่ทำงานช้าหรือทำให้เกิดปัญหา สถานการณ์นี้มักเกิดขึ้นเนื่องจากผู้พัฒนาไม่ได้พิจารณาการกำหนดค่าบางอย่าง
ในวิกิพีเดียคุณสามารถทำได้ อ่านเพิ่มเติม เกี่ยวกับกระบวนการเหล่านี้
การดำเนินการคำสั่งด้านบนเราสามารถเห็นกระบวนการที่กำลังดำเนินการในระบบแบบเรียลไทม์และจะระบุว่ามีอยู่ในสถานะซอมบี้หรือไม่ แต่ไม่ได้ระบุว่าเป็นกระบวนการใด
หากต้องการดูกระบวนการทั้งหมดพิมพ์ในเทอร์มินัล: ps auxและดูเฉพาะซอมบี้: ps -el | grep 'Z'o ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'
alf @ Alf ~ $ ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'
1945 Z
หากเมื่อแสดงรายการกระบวนการมีรายการหนึ่งปรากฏขึ้นพร้อมสถานะ Z แสดงว่าเป็นซอมบี้ซึ่งหมายความว่าแอปพลิเคชันไม่ได้รับการแก้ไขอย่างดีหรือมีข้อบกพร่องการรู้ว่า PID สามารถกำจัดได้โดยดำเนินการคำสั่งที่คล้ายกับในเทอร์มินัล ในตัวอย่างนี้:
alf @ Alf ~ $ ฆ่า - 9 1945
เมื่อคุณมีกระบวนการซอมบี้จำนวนมากหรืออย่างน้อยมากกว่าหนึ่งกระบวนการคุณสามารถใช้คำสั่งต่อไปนี้เพื่อฆ่าพวกมันมันจะใช้ได้ผลก็ต่อเมื่อคุณเรียกใช้โดยไม่ต้องมีกระบวนการซอมบี้จะไม่มีอะไรเกิดขึ้น:
alf @ Alf ~ $ sudo kill -HUP `ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]' | awk '{พิมพ์ $ 2}' ''
ความนับถือ
????
ขอบคุณการสนับสนุนที่ดีมากฉันจะบันทึกคำสั่งเพื่อทำการตรวจสอบเป็นระยะ
ขอบคุณบทความดีๆ
คำชี้แจงสองสามข้อเกี่ยวกับบทความของคุณ:
คำว่า "กระบวนการซอมบี้" ไม่เหมาะสมในทางเทคนิคและพวกเราที่มีประสบการณ์เล็กน้อยกับ GNU / Linux ควรหลีกเลี่ยงการใช้งานเนื่องจากไม่มีกระบวนการทำงานในตัวเอง แต่เป็นเพียงการอ้างอิงถึงกระบวนการที่ไม่มีอยู่ในระบบอีกต่อไปและ เขาไม่ได้เปิดเผยตัวตนของเขา
"กระบวนการซอมบี้" เป็นรายการในตารางการแมปของตัวระบุกระบวนการ (ตัวอธิบายกระบวนการ) ดังนั้นจึงไม่ใช้ทรัพยากรเกินหน่วยความจำสองสามไบต์ที่ระบบใช้เพื่อติดตาม ตารางกระบวนการ
ปัญหาเดียวที่อาจมีกับตัวบอกรีจิสตรี ghost (หรือ zombie) ก็คือถ้าพวกมันวางไข่เร็วเกินไปพวกเขาสามารถครอบครองตารางการจัดสรรตัวอธิบายกระบวนการทั้งหมดในทางทฤษฎีออกจากระบบโดยไม่มีที่ว่างสำหรับเร็กคอร์ดใหม่ดังนั้นจึงอาจเป็นได้ ไม่สามารถเรียกใช้โปรแกรมใหม่ - ที่บันทึกกระบวนการของพวกเขา - ในที่สุดก็วางสายเครื่อง
อย่างไรก็ตามสิ่งนี้แทบจะเป็นไปไม่ได้เลยที่จะเกิดขึ้นเนื่องจากในระบบ 32 บิตมีช่องว่าง 32767 สำหรับการลงทะเบียนกระบวนการ (ไม่ค่อยมีหรือไม่เคยใช้) และสองเท่าในระบบ 64 บิต
วิธีเดียวที่จะทำให้ระบบล่มโดยลบกระบวนการที่ตายแล้วออกอย่างไม่ถูกต้องคือการสร้างกระบวนการและฆ่าพวกมันอย่างรวดเร็วโดยไม่ต้องทำความสะอาดตัวอธิบายกระบวนการอย่างถูกต้อง (นั่นคือการสร้าง "กระบวนการซอมบี้") แต่ลองมาดูกันถ้ามีคนต้องการแขวนระบบ มีวิธีที่ตรงกว่านั้นมาก เพื่อเริ่มสร้างกระบวนการใหม่อย่างรวดเร็วในรูปแบบเลขชี้กำลังที่ทำให้ระบบติดขัดและหยุดทำงาน หนึ่งในวิธีที่จะบรรลุสิ่งนี้ด้วยส้อมระเบิด:
: () {: |: &};:
คุณสามารถทำให้ระบบค่อนข้างทนทานต่อส้อมระเบิดได้โดยกำหนดค่า /etc/security/limits.conf ให้ถูกต้องแม้ว่าจะต้องคำนึงว่ายิ่งเราจำกัดความเป็นไปได้ในการสร้างกระบวนการใหม่มากเท่าไหร่เราก็จะสามารถเรียกใช้แอปพลิเคชันน้อยลงในระบบของเราได้พร้อมกัน อย่างไรก็ตามมันเป็นเครื่องมือที่ถูกต้องสำหรับผู้ดูแลระบบที่หวาดระแวงทุกคนที่ต้องการควบคุมระบบของพวกเขาได้ดีมาก!
บทความนี้มีข้อมูลที่ดีเกี่ยวกับตัวบอกกระบวนการที่ไม่ถูกต้อง:
http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
และในนี้มีคำอธิบายที่ชัดเจนเกี่ยวกับการทำงานของส้อมระเบิด: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work
Salu2
msx: «คำว่า "กระบวนการซอมบี้" ไม่เหมาะสมในทางเทคนิคและพวกเราที่มีประสบการณ์เล็กน้อยใน GNU / Linux ควรหลีกเลี่ยงการใช้มัน…»ฮ่าฮ่าฮ่า มีเพียงสิ่งที่ยิ่งใหญ่กว่าความภาคภูมิใจของคุณนั่นคือรสนิยมที่ไม่ดีของคุณ เฮ้สิ่งที่คุณทำมันแย่มากถ้าคุณอยากจะบรรยายหาที่คณะหรือเขียนบล็อกของคุณเองและเขียนสิ่งที่คุณต้องการ แต่การมาที่นี่เพื่อแก้ไขการแบนให้เป็น Alf ที่ดีนั้นมีรสชาติที่แย่จริงๆ
ความจริงดูเหมือนสำหรับฉันเป็นความคิดเห็นที่น่าสนใจทีเดียว เยอะกว่าโพสต์
ขอบคุณที่น่าสนใจมาก
ขอบคุณบทความที่ยอดเยี่ยม
MSX
«คำว่า "กระบวนการซอมบี้" ไม่เหมาะสมในทางเทคนิคและพวกเราที่มีประสบการณ์เล็กน้อยใน GNU / Linux ควรหลีกเลี่ยงการใช้มัน»
เราจะต้องแจ้งให้ผู้พัฒนาทราบเนื่องจากอย่างที่คุณเห็นมีการใช้คำว่าซอมบี้ด้วยเช่นกันฉันอ่านมันบนคอนโซล
ความนับถือ
ขอแสดงความยินดีบทความที่ดีมากฉันสงสัยมาตลอดว่าพวกเขาเป็น PZs แต่ฉันไม่เคยมีเวลาตรวจสอบเลยตอนนี้ฉันไปที่หน้าและฉันพบคำตอบขอบคุณ…….
ใน KDE ที่มีกิจกรรมระบบควบคุม + หลบหนีออกไปและเราสามารถฆ่าซอมบี้เหล่านั้นได้อย่างรวดเร็ว
การแก้ไขมันเป็น ZOMBIE ไม่ใช่กระบวนการ ZOMBIE
ซอมบี้เป็นภาษาอังกฤษ
Zombi ในภาษาสเปน
หรูหราขอบคุณ!.
ขั้นแรกคำว่ากระบวนการซอมบี้ดูเหมือนถูกต้องทั้งหมด นอกจากนี้ระยะที่มีความสำคัญน้อยที่สุด
ประเด็นก็คือตามที่ msx ระบุและวิกิพีเดียเดียวกัน (ฉันอ่านบทความ) กระบวนการซอมบี้นั้นตายไปแล้ว
«เมื่อกระบวนการสิ้นสุดลงหน่วยความจำและทรัพยากรทั้งหมดที่เกี่ยวข้องจะถูกยกเลิกการอ้างอิงเพื่อให้สามารถใช้โดยกระบวนการอื่นได้ อย่างไรก็ตามรายการกระบวนการในตารางกระบวนการยังคงอยู่»
นั่นคือกระบวนการไม่ได้ใช้ทรัพยากรระบบอีกต่อไปดังนั้นภาระในระบบจึงน้อยที่สุดดังที่อธิบายโดย msx
อย่างไรก็ตามสิ่งเดียวที่มีคือรายการที่ไม่ถูกต้องในตารางกระบวนการ ... ซึ่งหากมีหลายพันรายการบางทีมันอาจจะเป็นการโหลด (ท้ายที่สุดโปรเซสเซอร์ต้องอ่านตารางกระบวนการและจะอ่านข้อมูลที่ไร้ประโยชน์จำนวนมาก) นอกเหนือจากการสะท้อนแนวทางการเขียนโปรแกรมที่ไม่ดี (มีบางคนกำลังสร้างแอปพลิเคชันที่ไม่ดี)
แต่ในตัวเองคำอธิบายของโพสต์นั้นไม่ถูกต้องนักและคำอธิบายที่ถูกต้องน่าจะเป็นคำอธิบายของ msx