जवाबों:
प्रोग्राम वास्तव में कभी भी SIGKILL सिग्नल प्राप्त नहीं करता है, क्योंकि SIGKILL ऑपरेटिंग सिस्टम / कर्नेल द्वारा पूरी तरह से संभाला जाता है।
जब किसी विशेष प्रक्रिया के लिए SIGKILL भेजा जाता है, तो कर्नेल का शेड्यूलर उस प्रक्रिया को उपयोगकर्ता-स्थान कोड चलाने के लिए और अधिक CPU समय देना तुरंत बंद कर देता है। यदि समय-समय पर शेड्यूलर यह निर्णय लेता है तो प्रक्रिया में अन्य CPU / कोर पर उपयोगकर्ता-स्पेस कोड निष्पादित करने वाले थ्रेड्स हैं, उन थ्रेड्स को भी रोक दिया जाएगा। (सिंगल-कोर सिस्टम में यह बहुत सरल हुआ करता था: यदि सिस्टम में एकमात्र CPU कोर शेड्यूलर चला रहा था, तो परिभाषा के अनुसार यह उसी समय प्रक्रिया नहीं चला रहा था!)
यदि प्रक्रिया / थ्रेड कर्नेल कोड निष्पादित कर रहा है (जैसे कि एक सिस्टम कॉल, या एक I / O ऑपरेशन जो मेमोरी-मैप की गई फ़ाइल से जुड़ा हुआ है) SIGKILL के समय, यह थोड़ा पेचीदा हो जाता है: केवल कुछ सिस्टम कॉल ही इंटरप्ट होते हैं, इसलिए कर्नेल आंतरिक रूप से प्रक्रिया को एक विशेष "डाइंग" स्थिति में होने तक चिह्नित करता है जब तक कि सिस्टम कॉल या आई / ओ संचालन हल नहीं हो जाता है। सीपीयू को हल करने का समय सामान्य रूप से निर्धारित किया जाएगा। इंटरप्टिबल सिस्टम कॉल या आई / ओ ऑपरेशंस की जाँच करेगा कि क्या प्रक्रिया है कि उन्हें बुलाया किसी भी उपयुक्त रोक बिंदुओं पर मर रहा है, और उस मामले में जल्दी बाहर निकल जाएगा। निर्बाध संचालन पूर्णता में चलेगा, और उपयोगकर्ता-अंतरिक्ष कोड पर लौटने से ठीक पहले "मरने" की स्थिति की जांच करेगा।
एक बार किसी भी इन-प्रोसेस कर्नेल रूटीन को हल करने के बाद, प्रक्रिया स्थिति को "मरने" से "मृत" में बदल दिया जाता है और कर्नेल इसे साफ करना शुरू कर देता है, जब एक कार्यक्रम सामान्य रूप से बाहर निकलता है। एक बार जब सफाई पूरी हो जाती है, तो अधिक से अधिक-128 परिणाम कोड सौंपा जाएगा (यह इंगित करने के लिए कि प्रक्रिया एक संकेत द्वारा मार दी गई थी , गंदे विवरणों के लिए यह उत्तर देखें ), और प्रक्रिया "ज़ोंबी" राज्य में संक्रमण करेगी। । मारे गए प्रक्रिया के माता-पिता को एक SIGCHLD संकेत के साथ सूचित किया जाएगा।
नतीजतन, इस प्रक्रिया को वास्तव में उस जानकारी को संसाधित करने का मौका कभी नहीं मिलेगा जो इसे SIGKILL को मिली है।
जब एक प्रक्रिया "ज़ोंबी" स्थिति में होती है तो इसका मतलब है कि प्रक्रिया पहले से ही मृत है, लेकिन इसकी मूल प्रक्रिया ने wait(2)
सिस्टम कॉल का उपयोग करके मृत प्रक्रिया के निकास कोड को पढ़कर अभी तक इसे स्वीकार नहीं किया है । मूल रूप से एकमात्र संसाधन एक ज़ोंबी प्रक्रिया है जो किसी भी अधिक उपभोग कर रही है वह प्रक्रिया तालिका में एक स्लॉट है जो अपनी पीआईडी, निकास कोड और प्रक्रिया के कुछ अन्य "महत्वपूर्ण आंकड़े" को अपनी मृत्यु के समय रखती है।
यदि माता-पिता की प्रक्रिया अपने बच्चों से पहले मर जाती है, तो अनाथ बच्चे की प्रक्रियाओं को स्वचालित रूप से PID # 1 द्वारा अपनाया जाता है, जिसका विशेष कर्तव्य होता wait(2)
है कि वह फोन करता रहे ताकि कोई भी अनाथ प्रक्रिया लाश के रूप में चारों ओर न चिपके।
यदि किसी ज़ोंबी प्रक्रिया को स्पष्ट होने में कई मिनट लगते हैं, तो यह बताता है कि ज़ोंबी की मूल प्रक्रिया संघर्ष कर रही है या अपना काम ठीक से नहीं कर रही है।
यूनिक्स जैसे ऑपरेटिंग सिस्टम में ज़ोंबी समस्याओं के मामले में क्या करना है, इस पर जीभ-में-गाल का वर्णन है: "आप लाश के लिए कुछ भी नहीं कर सकते, क्योंकि वे पहले से ही मर चुके हैं। इसके बजाय, दुष्ट ज़ोंबी मास्टर को मार डालो! " (यानी कष्टप्रद लाश की मूल प्रक्रिया)
ps
: 'एस' आई / ओ के लिए है जो इस बात का इंतजार करता है कि सिग्नल देने के लिए कर्नेल रद्द हो सकता है, और उन लोगों के लिए 'डी' नहीं।