कैसे लिनक्स ज़ोंबी प्रक्रिया को संभालता है


12

ज़ोंबी प्रक्रिया यूनिक्स / लिनक्स सिस्टम में बनाई गई हैं। हम उन्हें killकमांड के जरिए हटा सकते हैं ।

लेकिन क्या ज़ोंबी प्रक्रियाओं को संभालने के लिए लिनक्स में कोई अंतर्निहित साफ-सफाई तंत्र है?

जवाबों:


18

ज़ोंबी प्रक्रियाएं पहले से ही मृत हैं। आप उन्हें मार नहीं सकते। killआदेश या सिस्टम कॉल एक ज़ोंबी प्रक्रिया पर कोई प्रभाव नहीं है। (आप एक ज़ोंबी के साथ दूर जा सकते हैं kill, लेकिन आपको ज़ोंबी को शूट करना होगा, ज़ोंबी को नहीं, जैसा कि हम एक मिनट में देखेंगे।)

एक ज़ोंबी प्रक्रिया वास्तव में एक प्रक्रिया नहीं है, यह केवल प्रक्रिया तालिका में एक प्रविष्टि है। ज़ोंबी प्रक्रिया से जुड़े कोई अन्य संसाधन नहीं हैं: इसमें कोई मेमोरी या कोई रनिंग कोड नहीं है, यह किसी भी फाइल को खुला नहीं रखता है, आदि।

जब एक प्रक्रिया मर जाती है, तो अन्य सभी संसाधनों को साफ करने के बाद जाने की आखिरी चीज, प्रक्रिया तालिका में प्रविष्टि है। यह प्रविष्टि चारों ओर रखी जाती है, एक ज़ोंबी का निर्माण करते हुए, माता-पिता की प्रक्रिया को बच्चे की निकास स्थिति को ट्रैक करने की अनुमति देता है। माता-पिता waitsyscalls के परिवार में से एक को बुलाकर बाहर निकलने की स्थिति पढ़ते हैं; इस बिंदु पर, ज़ोंबी गायब हो जाता है। कॉलिंग waitहै करने के लिए कहा काटते मृत जा रहा है, लेकिन किसी तरह से अभी भी पूरी तरह से पुनर्जन्म में संसाधित एक ज़ोंबी के रूपक का विस्तार बच्चे,। माता-पिता यह भी संकेत कर सकते हैं कि यह परवाह नहीं करता है (SIGCHLD सिग्नल की अनदेखी करके या ध्वज के sigactionसाथ कॉल करके SA_NOCLDWAIT), जिस स्थिति में बच्चे के मरने पर प्रक्रिया तालिका में प्रविष्टि तुरंत हटा दी जाती है।

इस प्रकार एक ज़ोंबी केवल तब मौजूद होता है जब एक प्रक्रिया मर गई हो और उसके माता-पिता ने waitअभी तक फोन नहीं किया हो। यह स्थिति केवल तब तक बनी रह सकती है जब तक कि अभिभावक अभी भी चल रहे हों। यदि माता-पिता बच्चे की मृत्यु से पहले मर जाते हैं या बच्चे की स्थिति को पढ़े बिना मर जाते हैं, तो ज़ोंबी की मूल प्रक्रिया PID 1 के साथ प्रक्रिया में सेट हो जाती है, जो कि है init। नौकरियों में से एक को एक लूप में initकॉल waitकरना है और इस प्रकार अपने माता-पिता द्वारा पीछे छोड़ दी गई किसी भी ज़ोंबी प्रक्रिया को काटना है।


6

आप killएक ज़ोंबी प्रक्रिया नहीं है, क्योंकि यह पहले से ही मर चुका है।

ज़ोंबी प्रक्रियाओं को waitउनके माता-पिता द्वारा संपादित किया जाना है , ताकि उनकी निकास स्थिति एकत्र की जा सके।

केवल "अंतर्निहित क्लीन-अप तंत्र" लिनक्स में है, इस मामले के लिए काम करता है कि कोई भी अभिभावक-प्रक्रिया अपने बच्चों के निकास की स्थिति को इकट्ठा करने से पहले ही मर जाती है। इस मामले में, प्रत्येक बच्चे को initप्रक्रिया द्वारा विरासत में मिला है , जो waitबच्चे पर होगा , अपनी निकास स्थिति को इकट्ठा करेगा और प्रक्रिया तालिका में इसके प्रवेश को हटा देगा।


3

जैसे ही एक प्रक्रिया के माता-पिता की मृत्यु हो जाती है, यह प्रक्रिया एक अनाथ हो जाती है - यह एक ज़ोंबी है या नहीं, इसकी अवहेलना। क्या होता है अनाथ? उन्हें एक नया अभिभावक मिलता है, जिसे बुलाया जाता है init। प्रत्येक अनाथ पर initहोगा waitकि यह एकत्र किया है, इस प्रकार अनाथ (कि यह भी एक ज़ोंबी हो सकता है) काटना है।


1
नहीं। सटीक होने के नाते, किसी भी प्रक्रिया initको नहीं मारता है। यह केवल अपने बच्चों पर अपनी स्थिति एकत्र करने के लिए है। wait
13

1
@chrk, फिलिप: सामान्य शब्द है काटते
गिल्स एसओ- बुराई को रोकना '

1

नहीं, लाश के लिए कोई अंतर्निहित सफाई तंत्र नहीं है। उनके माता-पिता के मारे जाने के बाद लाश ज़ोंबी स्वर्ग में जाती है। तब तक, ओएस उन्हें माता-पिता से बाहर निकलने की स्थिति वापस करने के लिए रखता है।


तो .. यह स्मृति आदि का नकारात्मक प्रभाव नहीं है?

1
वास्तव में, जब ज़ोंबी के माता-पिता की मृत्यु हो जाती है, तो initप्रक्रिया समाप्त हो जाती है और इसे कॉल waitकरेंगे

नहीं, प्रक्रिया को आवंटित सभी संसाधन जारी किए जाते हैं, प्रक्रिया तालिका में प्रवेश को छोड़कर।
unxnut
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.