लाश मूल रूप से मृत प्रक्रियाओं के बचे हुए बिट्स हैं जिन्हें ठीक से साफ नहीं किया गया है। एक प्रोग्राम जो ज़ोंबी प्रक्रियाओं को बनाता है ठीक से प्रोग्राम नहीं किया जाता है - प्रोग्राम ज़ोंबी प्रक्रियाओं को चारों ओर चिपकने नहीं देते हैं।
एक ज़ोंबी प्रक्रिया क्या है?
यह समझने के लिए कि ज़ोंबी प्रक्रिया क्या है और जो ज़ोंबी प्रक्रियाओं को प्रकट करने का कारण बनती है, आपको कुछ समझने की आवश्यकता होगी कि लिनक्स पर प्रक्रियाएं कैसे काम करती हैं।
जब लिनक्स पर एक प्रक्रिया मर जाती है, तो इसे तुरंत स्मृति से हटाया नहीं जाता है - इसकी प्रक्रिया डिस्क्रिप्टर स्मृति में रहता है (प्रक्रिया वर्णनकर्ता केवल स्मृति की एक छोटी राशि लेता है)। प्रक्रिया की स्थिति EXIT_ZOMBIE बन जाती है और प्रक्रिया के माता-पिता को सूचित किया जाता है कि SIGCHLD सिग्नल के साथ इसकी बाल प्रक्रिया की मृत्यु हो गई है। तब माता-पिता प्रक्रिया को मृत प्रक्रिया की निकास स्थिति और अन्य जानकारी पढ़ने के लिए प्रतीक्षा () सिस्टम कॉल निष्पादित करना होता है। यह माता-पिता की प्रक्रिया को मृत प्रक्रिया से जानकारी प्राप्त करने की अनुमति देता है। प्रतीक्षा () कहा जाता है के बाद, ज़ोंबी प्रक्रिया पूरी तरह से स्मृति से हटा दिया जाता है।
यह आमतौर पर बहुत तेज़ी से होता है, इसलिए आप अपने सिस्टम पर जमा होने वाली ज़ोंबी प्रक्रियाओं को नहीं देख पाएंगे। हालांकि, अगर माता-पिता की प्रक्रिया ठीक से प्रोग्राम नहीं की जाती है और कभी भी प्रतीक्षा नहीं करती है (), तो ज़ोंबी बच्चे साफ होने तक स्मृति में घूमते रहेंगे।
यूटिलिटीज जैसे गनोम सिस्टम मॉनीटर, द चोटी आदेश, और ps कमांड प्रदर्शन ज़ोंबी प्रक्रियाओं।
ज़ोंबी प्रक्रियाओं के खतरे
ज़ोंबी प्रक्रियाएं किसी भी सिस्टम संसाधन का उपयोग नहीं करती हैं। (असल में, प्रत्येक व्यक्ति अपनी प्रक्रिया डिस्क्रिप्टर को स्टोर करने के लिए सिस्टम मेमोरी की एक बहुत ही छोटी मात्रा का उपयोग करता है।) हालांकि, प्रत्येक ज़ोंबी प्रक्रिया इसकी प्रक्रिया आईडी (पीआईडी) को बरकरार रखती है। लिनक्स सिस्टम में 32-बिट सिस्टम पर डिफ़ॉल्ट रूप से प्रक्रिया आईडी की एक सीमित संख्या है - 32767। यदि ज़ोंबी बहुत तेज दर पर जमा हो रहे हैं - उदाहरण के लिए, यदि अनुचित प्रोग्राम किए गए सर्वर सॉफ़्टवेयर लोड के तहत ज़ोंबी प्रक्रियाएं बना रहे हैं - उपलब्ध पीआईडी का पूरा पूल अंततः ज़ोंबी प्रक्रियाओं को सौंपा जाएगा, अन्य प्रक्रियाओं को लॉन्च करने से रोक देगा।
हालांकि, आसपास लटकने वाली कुछ ज़ोंबी प्रक्रियाएं कोई समस्या नहीं हैं - हालांकि वे आपके सिस्टम पर अपनी मूल प्रक्रिया के साथ एक बग इंगित करते हैं।
ज़ोंबी प्रक्रियाओं से छुटकारा पा रहा है
आप ज़ोंबी प्रक्रियाओं को मार नहीं सकते क्योंकि आप सिग्की सिग्नल के साथ सामान्य प्रक्रियाओं को मार सकते हैं - ज़ोंबी प्रक्रियाएं पहले से ही मर चुकी हैं। ध्यान रखें कि आपको ज़ोंबी प्रक्रियाओं से छुटकारा पाने की आवश्यकता नहीं है जब तक कि आपके सिस्टम पर बड़ी मात्रा न हो - कुछ लाश हानिरहित हैं। हालांकि, ज़ोंबी प्रक्रियाओं से छुटकारा पाने के कुछ तरीके हैं।
एक तरीका है माता-पिता प्रक्रिया को SIGCHLD सिग्नल भेजना। यह संकेत प्रतीक्षा () सिस्टम कॉल निष्पादित करने और अपने ज़ोंबी बच्चों को साफ करने के लिए मूल प्रक्रिया को बताता है। के साथ सिग्नल भेजें हत्या आदेश, प्रतिस्थापित पीआईडी मूल प्रक्रिया के पीआईडी के साथ नीचे दिए गए आदेश में:
kill -s SIGCHLD pid
हालांकि, अगर माता-पिता की प्रक्रिया ठीक से प्रोग्राम नहीं की जाती है और SIGCHLD संकेतों को अनदेखा कर रही है, तो इससे मदद नहीं मिलेगी। आपको ज़ोंबी की मूल प्रक्रिया को मारना या बंद करना होगा। जब ज़ोंबी बनने वाली प्रक्रिया समाप्त होती है, तो init ज़ोंबी प्रक्रियाओं को विरासत में लेता है और उनके नए माता-पिता बन जाता है। (init बूट पर लिनक्स पर पहली प्रक्रिया शुरू की गई है और उसे पीआईडी असाइन किया गया है।) init समय-समय पर अपने ज़ोंबी बच्चों को साफ करने के लिए प्रतीक्षा () सिस्टम कॉल निष्पादित करता है, इसलिए init लाश का छोटा काम करेगा। आप इसे बंद करने के बाद मूल प्रक्रिया को पुनरारंभ कर सकते हैं।
यदि एक पैरेंट प्रक्रिया ज़ोंबी बनाने के लिए जारी है, तो इसे ठीक किया जाना चाहिए ताकि यह अपने ज़ोंबी बच्चों को काटने के लिए प्रतीक्षा करें ()। यदि आपके सिस्टम पर कोई प्रोग्राम ज़ोंबी बना रहता है तो एक बग रिपोर्ट दर्ज करें।