मुखपृष्ठ » कैसे » लिनक्स पर एक ज़ोंबी प्रक्रिया क्या है?

    लिनक्स पर एक ज़ोंबी प्रक्रिया क्या है?

    यदि आप एक लिनक्स उपयोगकर्ता हैं, तो आपने ज़ोंबी प्रक्रियाओं को अपनी प्रक्रियाओं की सूची के आसपास शंबलिंग करते देखा होगा। आप एक ज़ोंबी प्रक्रिया को नहीं मार सकते क्योंकि यह पहले से ही मृत है - एक वास्तविक ज़ोंबी की तरह.

    लाश मूल रूप से मृत प्रक्रियाओं के बचे हुए टुकड़े हैं जिन्हें ठीक से साफ नहीं किया गया है। एक प्रोग्राम जो ज़ोंबी प्रक्रिया बनाता है, उसे ठीक से प्रोग्राम नहीं किया जाता है - प्रोग्राम को ज़ोंबी प्रक्रियाओं को चारों ओर से नहीं चलने देना चाहिए.

    छवि क्रेडिट: फ़्लिकर पर डैनियल हॉलिस्टर (रीमिक्स)

    क्या एक ज़ोंबी प्रक्रिया है?

    यह समझने के लिए कि एक ज़ोंबी प्रक्रिया क्या है और ज़ोंबी प्रक्रियाओं का क्या कारण है, आपको थोड़ा सा समझना होगा कि कैसे प्रक्रियाएं लिनक्स पर काम करती हैं.

    जब एक प्रक्रिया लिनक्स पर मर जाती है, तो यह तुरंत मेमोरी से नहीं हटाया जाता है - इसकी प्रक्रिया डिस्क्रिप्टर मेमोरी में रहती है (प्रोसेस डिस्क्रिप्टर केवल थोड़ी मात्रा में मेमोरी लेता है)। प्रक्रिया की स्थिति EXIT_ZOMBIE हो जाती है और प्रक्रिया के माता-पिता को सूचित किया जाता है कि SIGCHLD संकेत के साथ इसकी बाल प्रक्रिया मर गई है। माता-पिता की प्रक्रिया तब मृत प्रक्रिया के निकास की स्थिति और अन्य जानकारी को पढ़ने के लिए प्रतीक्षा () सिस्टम कॉल को निष्पादित करने के लिए माना जाता है। यह मूल प्रक्रिया को मृत प्रक्रिया से जानकारी प्राप्त करने की अनुमति देता है। प्रतीक्षा के बाद () कहा जाता है, ज़ोंबी प्रक्रिया पूरी तरह से स्मृति से हटा दी जाती है.

    यह सामान्य रूप से बहुत जल्दी होता है, इसलिए आप ज़ोंबी प्रक्रियाओं को आपके सिस्टम पर जमा नहीं देखेंगे। हालाँकि, यदि कोई माता-पिता प्रक्रिया ठीक से प्रोग्राम नहीं की जाती है और कभी प्रतीक्षा नहीं करता है (), उसके ज़ोंबी बच्चे स्मृति में चारों ओर चिपक जाएंगे, जब तक वे साफ नहीं हो जाते.

    गनोम सिस्टम मॉनिटर जैसी उपयोगिताएँ, द चोटी कमांड, और ps कमांड प्रदर्शन ज़ोंबी प्रक्रिया.

    ज़ोंबी प्रक्रियाओं के खतरे

    ज़ोंबी प्रक्रियाएं किसी भी सिस्टम संसाधनों का उपयोग नहीं करती हैं। (वास्तव में, हर एक अपनी प्रक्रिया डिस्क्रिप्टर को स्टोर करने के लिए बहुत कम मात्रा में सिस्टम मेमोरी का उपयोग करता है।) हालांकि, प्रत्येक ज़ोंबी प्रक्रिया अपनी प्रक्रिया आईडी (पीआईडी) को बरकरार रखती है। लिनक्स सिस्टम में प्रक्रिया आईडी की एक सीमित संख्या है - 32-बिट सिस्टम पर डिफ़ॉल्ट रूप से 32767। यदि लाश बहुत तेज दर से जमा हो रही है - उदाहरण के लिए, यदि अनुचित रूप से प्रोग्राम किया गया सर्वर सॉफ्टवेयर लोड के तहत ज़ोंबी प्रक्रियाएं बना रहा है - उपलब्ध पीआईडी ​​का पूरा पूल अंततः ज़ोंबी प्रक्रियाओं को सौंपा जाएगा, तो अन्य प्रक्रियाओं को लॉन्च करने से रोका जाएगा।.

    हालांकि, कुछ ज़ोंबी प्रक्रियाओं के चारों ओर लटकी हुई कोई समस्या नहीं है - हालांकि वे आपके सिस्टम पर अपनी मूल प्रक्रिया के साथ एक बग का संकेत देते हैं.

    ज़ोंबी प्रक्रियाओं से छुटकारा पाना

    आप ज़ोंबी प्रक्रियाओं को नहीं मार सकते क्योंकि आप SIGKILL सिग्नल के साथ सामान्य प्रक्रियाओं को मार सकते हैं - ज़ोंबी प्रक्रियाएं पहले से ही मृत हैं। ध्यान रखें कि आपको ज़ोंबी प्रक्रियाओं से छुटकारा पाने की आवश्यकता नहीं है जब तक कि आपके सिस्टम पर एक बड़ी राशि न हो - कुछ लाश हानिरहित हैं। हालांकि, कुछ तरीके हैं जिनसे आप ज़ोंबी प्रक्रियाओं से छुटकारा पा सकते हैं.

    एक तरीका मूल प्रक्रिया को SIGCHLD संकेत भेजकर है। यह संकेत प्रतीक्षा () सिस्टम कॉल को निष्पादित करने और अपने ज़ोंबी बच्चों को साफ करने के लिए मूल प्रक्रिया को बताता है। के साथ संकेत भेजें हत्या कमान, जगह पीआईडी मूल प्रक्रिया के PID के साथ नीचे कमांड में:

    किल-एस सिगचल्ड पीआईडी

    हालाँकि, यदि मूल प्रक्रिया ठीक से प्रोग्राम नहीं की गई है और SIGCHLD संकेतों को अनदेखा कर रही है, तो यह मदद नहीं करेगा। आपको लाश की मूल प्रक्रिया को मारना या बंद करना होगा। जब लाश बनाने वाली प्रक्रिया समाप्त हो जाती है, तो init ज़ोंबी प्रक्रियाओं को विरासत में देती है और उनके नए माता-पिता बन जाते हैं। (init बूट पर लिनक्स पर शुरू की गई पहली प्रक्रिया है और इसे PID 1 को सौंपा गया है) यह समय-समय पर अपने ज़ोंबी बच्चों को साफ करने के लिए प्रतीक्षा () सिस्टम कॉल को निष्पादित करता है, इसलिए यह init लाश का छोटा काम करेगा। आप इसे बंद करने के बाद मूल प्रक्रिया को पुनरारंभ कर सकते हैं.

    यदि माता-पिता की प्रक्रिया लाश बनाना जारी रखती है, तो इसे ठीक किया जाना चाहिए ताकि यह अपने ज़ोंबी बच्चों को ठीक करने के लिए प्रतीक्षा () को ठीक से बुला सके। बग रिपोर्ट दर्ज करें यदि आपके सिस्टम पर कोई प्रोग्राम लाश बनाता है.