क्या मुझे अपने सिस्टम में ज़ोंबी प्रक्रिया को मारना चाहिए?


20

चूंकि मैं लिनक्स / यूनिक्स सिस्टम में नौसिखिया हूं और सिर्फ ज़ोंबी प्रक्रियाओं के बारे में पढ़ता हूं, इसलिए मेरा एक सवाल है। मेरे पास अभी उनमें से 10 हैं। क्या मुझे उन्हें मारने की ज़रूरत है और यदि हाँ, तो क्यों? क्या वे मेरे सिस्टम पर लोड हैं?

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

25
उन्हें मारने की जरूरत नहीं है। वे पहले ही मर चुके हैं।
मार्को

2
इसलिए वे अब मेरे सिस्टम को लोड नहीं करते हैं। और वे इस तरह से रहेंगे जब तक मैं रिबूट प्रणाली या मैं उन्हें नहीं मारता, ठीक है?
जेसन पैडल

7
@ मार्को: आप मार नहीं सकते जो पहले से ही मर चुका है। लेकिन आप इसके माता-पिता को मार सकते हैं, हर्रहर!
wulxz

7
समस्या यह है कि उनके माता-पिता ने उन्हें (जब वे मर गए थे) वापस नहीं लिया।
ypercube y

3
10 लाश ??? आप प्रभावित हैं! रन जेसन रन।
ल्यूक एम

जवाबों:


29

आप एक ज़ोंबी को नहीं मार सकते, यह पहले से ही मृत है।

उस प्रक्रिया के संसाधन अन्य प्रक्रियाओं के लिए स्वतंत्र और उपलब्ध हैं। क्या रहता है प्रक्रिया तालिका में एक प्रविष्टि है। इसका प्रदर्शन पर प्रभाव नहीं है, चिंता न करें।


हाँ, यह समझ में आता है। मैं मूल प्रक्रिया को मार सकता हूं। जानकारी के लिए धन्यवाद। मैं सिर्फ यह जानना चाहता था कि वे लोड करते हैं या कोई सिस्टम नहीं।
जेसन पैडल

मेरा मानना ​​है कि हालांकि लाश की एक सीमा है। मुझे लगता है कि इसका 1024 है, इसलिए यह प्रदर्शन को प्रभावित नहीं करेगा, लेकिन मुझे लगता है कि आपके पास संख्या पर एक सीलिंग हो सकती है।
व्यावसायिक

@ProfessionalAmateur यदि आप ज़ोंबी सीमा (1024 या जो भी) मारते हैं तो क्या होता है?
फ्रोजन मटर की रोडी

@RoddyoftheFrozenPeas - ईमानदार Im यकीन नहीं करने के लिए, Ive ने हमेशा उस बिंदु पर पहुंचने से पहले उन्हें साफ किया। मुझे लगता है कि सिस्टम एक और ज़ोंबी बनाने की कोशिश करेगा और शायद किसी प्रकार की मेमोरी उल्लंघन या किसी अन्य हार्ड त्रुटि, अतिप्रवाह या विभाजन दोष है।
प्रोफेशनल

2
@ प्रोफेशनलअमिटर: लिनक्स में कोई ज़ोंबी सीमा नहीं है । ज़ोंबी पीआईडी /proc/sys/kernel/pid_maxहर दूसरे पीआईडी ​​की तरह ही होते हैं।
1

16

पीएस में दिखाई देने वाली ये ज़ोंबी प्रक्रियाएं क्या हैं? मैं उन्हें मारता हूं लेकिन वे दूर नहीं जाते हैं!

लाशें मृत प्रक्रियाएं हैं। आप मृतकों को नहीं मार सकते। सभी प्रक्रियाएं अंततः मर जाती हैं, और जब वे करते हैं तो वे लाश बन जाते हैं। वे लगभग कोई संसाधनों का उपभोग नहीं करते हैं, जो कि उम्मीद है कि क्योंकि वे मर चुके हैं! लाश का कारण इतना है कि ज़ोंबी के माता-पिता (प्रक्रिया) ज़ोंबी के बाहर निकलने की स्थिति और संसाधन उपयोग के आंकड़ों को पुनः प्राप्त कर सकते हैं। अभिभावक ऑपरेटिंग सिस्टम को संकेत देता है कि उसे अब वेट () सिस्टम कॉल का उपयोग करके ज़ोंबी की आवश्यकता नहीं है।

जब एक प्रक्रिया मर जाती है, तो उसका बच्चा सभी प्रक्रिया नंबर 1 के बच्चे बन जाते हैं, जो कि इनिट प्रक्रिया है। इनिट हमेशा बच्चों के मरने का इंतजार कर रही है, ताकि वे लाश के रूप में न रहें।

यदि आपके पास ज़ोंबी प्रक्रिया है, तो इसका मतलब है कि उन लाशों का उनके माता-पिता द्वारा इंतजार नहीं किया गया है (पीएसआईडी पीएसएल द्वारा प्रदर्शित)। आपके पास तीन विकल्प हैं: मूल प्रक्रिया को ठीक करें (इसे प्रतीक्षा करें); माता-पिता को मार डालो; या इसके साथ रहते हैं। याद रखें कि इसके साथ रहना इतना कठिन नहीं है क्योंकि पीएस के आउटपुट में लाश एक से अधिक अतिरिक्त लाइन लेती है।

स्रोत: http://www.linuxsa.org.au/tips/zchin.html

और यदि आप एक हत्या की होड़ में हैं, तो यह सुपरसुअर धागा आपके लिए दिलचस्प हो सकता है: आप एक ज़ोंबी प्रक्रिया की मूल प्रक्रिया को कैसे खोज सकते हैं?


ध्यान दें कि माता-पिता को ठीक करना अधिक मुश्किल हो सकता है - शायद यह अभी तक बच्चों के इंतजार की बात नहीं है। शायद यह बाद में (या हाँ, शायद यह नहीं होगा)।
रोमेन

हाँ तुम सही हो। मेरे द्वारा जुड़े प्रश्न का उत्तर आपको बताता है कि मूल प्रक्रिया का निर्धारण कैसे किया जाता है। तो आप हमेशा यह जांचने का मौका देते हैं कि कौन सी प्रक्रियाएं लाश बनाती हैं और यह तय करने के लिए कि क्या इसे चालू रखना आवश्यक है।
wulxz

7

आपको उन्हें मारने की जरूरत नहीं है।

कुछ बुनियादी समझ बनाने के लिए:

प्रत्येक प्रक्रिया एक मूल प्रक्रिया का बच्चा है (init प्रक्रिया को छोड़कर, लेकिन हमें उस बारे में चिंता करने की आवश्यकता नहीं है)।

जब कोई बच्चा प्रक्रिया निष्पादित करना समाप्त कर लेता है, तो इसमें अभी भी डेटा हो सकता है जो मूल प्रक्रिया तक पहुंचना चाहता है, आमतौर पर एक एक्जिट कोड जो बच्चे की प्रक्रिया के परिणाम का वर्णन करता है (क्या यह सफल हुआ? क्या यह त्रुटि थी? त्रुटि कोड क्या था?)।

एक समाप्त बच्चे की प्रक्रिया एक ज़ोंबी प्रक्रिया के रूप में प्रक्रिया तालिका में घूमती है जब तक कि माता-पिता की प्रक्रिया "पढ़ती है" या बच्चे की प्रक्रिया का इंतजार नहीं करती है, जो कि बस मूल प्रक्रिया ओएस को बता रही है कि उसे अब उस बच्चे की प्रक्रिया की आवश्यकता नहीं है; यह किसी भी रिटर्न मान को पढ़ना चाहता है, और इसके साथ किया जाता है। इस बिंदु पर, सिस्टम प्रक्रिया तालिका में प्रविष्टि को साफ करेगा।


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
बेनजीवेब जुने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.