Linux कर्नेल में सिग्नलिंग तंत्र चल रहे एप्लिकेशन को एक नई घटना होने पर सिस्टम को एसिंक्रोनस रूप से सूचित करने की अनुमति देता है। इसकी प्रकृति के कारण, इस सिग्नलिंग तंत्र को आमतौर पर सॉफ्टवेयर इंटरप्ट के रूप में जाना जाता है। जैसे हार्डवेयर बाधित होता है, वैसे ही सिग्नल किसी एप्लिकेशन के सामान्य प्रवाह को बाधित करते हैं, और जब कोई एप्लिकेशन सिग्नल प्राप्त करेगा तो यह अप्रत्याशित है।
आइए लिनक्स में सिग्नलिंग तंत्र में गहराई से गोता लगाएँ और समझें कि पर्दे के पीछे क्या होता है।
लिनक्स में बेसिक सिग्नल कॉन्सेप्ट
लिनक्स पर, प्रक्रियाएं तीन बुनियादी स्थितियों में संकेत उत्पन्न करती हैं:
- जब हार्डवेयर पक्ष पर एक असाधारण स्थिति उत्पन्न होती है। उदाहरण के लिए, आप ऐसी घटनाओं के बारे में सोच सकते हैं, जैसे कि अनुप्रयोग, बाहर के क्षेत्र तक पहुँचने का प्रयास कर रहा है अनुमत पता स्थान (विभाजन दोष) या मशीन कोड उत्पन्न करना जिसमें शून्य से एक विभाजन शामिल है संचालन।
- प्रमुख संयोजनों के उपयोग जैसी स्थितियां जैसे Ctrl + सी या Ctrl + Z उपयोगकर्ता द्वारा कंसोल पर, कंसोल स्क्रीन का आकार बदलना, या किल सिग्नल भेजना।
- एप्लिकेशन में सेट टाइमर की समय सीमा समाप्त हो जाती है, एप्लिकेशन को दी गई सीपीयू सीमा अधिक होती है, डेटा एक ओपन फाइल डिस्क्रिप्टर के पास आता है, आदि।
सिग्नल की अवधारणा यूनिक्स के शुरुआती संस्करणों के आसपास रही है। पहले, सिग्नल प्रोसेसिंग के संबंध में यूनिक्स संस्करणों के बीच कई अंतर थे। बाद में, साथ पॉज़िक्स मानकीकरण सिग्नल प्रबंधन के लिए बनाया गया, लिनक्स और अन्य यूनिक्स डेरिवेटिव ने इन मानकों का पालन करना शुरू कर दिया। इस कारण से, यूनिक्स सिग्नल और पॉज़िक्स सिग्नल की अवधारणाएं, जो आपको कुछ दस्तावेज़ों में मिल सकती हैं, अंतर की ओर इशारा करती हैं।
सिग्नल नंबर
सिग्नल के विभिन्न संख्यात्मक मान होते हैं, जो एक से शुरू होते हैं। उदाहरण के लिए, सिग्नल 1 एक है हांक देना लगभग हर प्रणाली में संकेत, या संकेत 9 एक है मारना संकेत।
हालाँकि, जब आप अपने अनुप्रयोगों में संकेतों का उपयोग करते हैं, तो इन नंबरों का उपयोग करने की सख्त मनाही है। पॉज़िक्स संकेतों के लिए, सिग्नल.एच फ़ाइल एप्लिकेशन में होनी चाहिए और डेवलपर को संबंधित संख्याओं की निरंतर परिभाषाओं का उपयोग करना चाहिए जैसे कि उच्छ्वास करो, सिगकिल, आदि। बजाय।
यदि आप जांच करते हैं /usr/include/signal.h आपके सिस्टम पर फ़ाइल, आप अतिरिक्त संचालन और अन्य शामिल फ़ाइलों को मानों की परिभाषाओं को देखकर देख सकते हैं जैसे कि __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, आदि। फ़ाइल में। आप लिनक्स सिस्टम पर उपलब्ध सिग्नल नंबर पा सकते हैं /usr/include/asm-generic/signal.h फ़ाइल, जिसे आपको सीधे अपने एप्लिकेशन कोड में शामिल करने की आवश्यकता नहीं है।
सिग्नल जनरेशन और भेजें
एक घटना के कारण सिग्नल उत्पन्न होता है। हालांकि, संबंधित एप्लिकेशन को सिग्नल भेजना (डिलीवर करना) सिग्नल की पीढ़ी के साथ-साथ नहीं होता है।
एप्लिकेशन को सिग्नल भेजे जाने के लिए, एप्लिकेशन वर्तमान में चल रहा होना चाहिए और उसके पास CPU संसाधन होने चाहिए। इसलिए, किसी विशिष्ट एप्लिकेशन को सिग्नल भेजना तब होता है जब प्रासंगिक एप्लिकेशन संदर्भ स्विच के बाद फिर से काम करना शुरू कर देता है।
लंबित सिग्नल अवधारणा
पीढ़ी से सिग्नल के प्रसारण के समय के दौरान, सिग्नल स्टैंडबाय स्थिति में होते हैं। आप लंबित संकेतों की संख्या और प्रक्रिया के लिए अनुमत लंबित संकेतों की संख्या तक पहुंच सकते हैं /proc/PID/status फ़ाइल।
# पीआईडी के साथ एक प्रक्रिया के लिए: 2299
बिल्ली / खरीद / 2299 / स्थिति
# आउटपुट
...
सिगक्यू: 2/31630
...
सिग्नल मास्क और ब्लॉकिंग
सिग्नल आने का सही समय एप्लिकेशन द्वारा अक्सर अप्रत्याशित होता है। इसलिए, किसी भी ऑपरेशन के दौरान कुछ महत्वपूर्ण रुकावटें आ सकती हैं। यह बड़े पैमाने पर आवेदन के लिए बड़ी समस्याएं पैदा कर सकता है।
इस तरह की कुछ अवांछनीय स्थितियों को रोकने के लिए सिग्नल मास्क का उपयोग करना आवश्यक है। इस प्रकार एक महत्वपूर्ण ऑपरेशन से पहले कुछ संकेतों को अवरुद्ध करना संभव है। इस स्तर पर, महत्वपूर्ण भाग को पूरा करना और परिभाषित ब्लॉकों को हटाना महत्वपूर्ण है। यह प्रक्रिया कुछ ऐसी है जिस पर एप्लिकेशन डेवलपर को ध्यान देना चाहिए।
जब एप्लिकेशन किसी सिग्नल को ब्लॉक करता है, तो उसी प्रकार के अन्य सिग्नल अनब्लॉक होने तक प्रतीक्षा की स्थिति में होंगे। आवेदन में ब्लॉक हटते ही पेंडिंग सिग्नल भेजने की सुविधा भी दी जाती है।
इस प्रकार, ब्लॉक के समय होल्ड पर लगाए गए समान प्रकार के सिग्नल सामान्य उपयोग में ब्लॉक हटा दिए जाने के बाद ही एप्लिकेशन को भेजे जाते हैं। रीयल-टाइम सिग्नल के लिए स्थिति अलग है।
लिनक्स सिग्नल प्रकार
सिग्नल प्रकारों के अनुसार डिफ़ॉल्ट क्रियाएं भिन्न हो सकती हैं। यदि संबंधित सिग्नल प्राप्त करने वाले एप्लिकेशन में सिग्नल हैंडलर फ़ंक्शन नहीं है, तो डिफ़ॉल्ट क्रिया होती है। कभी-कभी इसका मतलब एप्लिकेशन को समाप्त करना और कभी-कभी सिग्नल को अनदेखा करना होता है।
कुछ सिग्नल को एप्लिकेशन लेयर पर कैप्चर नहीं किया जा सकता है, ये सिग्नल हमेशा डिफॉल्ट एक्शन (जैसे किल सिग्नल) करते हैं।
कुछ कार्रवाइयों के अलावा जो किसी एप्लिकेशन को समाप्त करने का कारण बनती हैं, एक कोर डंप फ़ाइल भी तैयार की जाती है। डिस्क पर संबंधित प्रक्रिया की वर्चुअल मेमोरी टेबल लिखकर बनाई गई कोर डंप फाइलें, मदद करती हैं उपयोगकर्ता अगले चरणों में डिबगिंग टूल के साथ प्रक्रिया समाप्त होने से पहले राज्य की जानकारी की जांच कर सकता है।
निम्नलिखित मान एक पर आधारित हैं: अनुकरणीय एमआईपीएस वास्तुकला:
संकेत | संख्या | डिफ़ॉल्ट क्रिया | क्या इसे पकड़ा जा सकता है? |
---|---|---|---|
उच्छ्वास करो | 1 | आवेदन समाप्त करें | हाँ |
सिगिनट | 2 | आवेदन समाप्त करें | हाँ |
सिग्क्विट | 3 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिगिल | 4 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिगट्रैप | 5 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिगब्रत | 6 | आवेदन समाप्त करें (कोर डंप) | हाँ |
SIGFPE | 8 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिगकिल | 9 | आवेदन समाप्त करें | नहीं |
सिगबस | 10 | आवेदन समाप्त करें (कोर डंप) | हाँ |
SIGSEGV | 11 | आवेदन समाप्त करें (कोर डंप) | हाँ |
SIGSYS | 12 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिगपाइप | 13 | आवेदन समाप्त करें | हाँ |
सिगलर्म | 14 | आवेदन समाप्त करें | हाँ |
सिगटरम | 15 | आवेदन समाप्त करें | हाँ |
सिगुसर1 | 16 | आवेदन समाप्त करें | हाँ |
सिगुसर2 | 17 | आवेदन समाप्त करें | हाँ |
सिगचल्ड | 18 | नज़रअंदाज़ करना | हाँ |
सिगस्टप | 20 | विराम | हाँ |
सिगुर्ग | 21 | नज़रअंदाज़ करना | हाँ |
सिगपोल | 22 | आवेदन समाप्त करें | हाँ |
सिगस्टॉप | 23 | विराम | नहीं |
सिगकॉन्ट | 25 | रुके तो जारी रखें | हाँ |
सिगटिन | 26 | विराम | हाँ |
सिगटौ | 27 | विराम | हाँ |
SIGVTALRM | 28 | आवेदन समाप्त करें | हाँ |
सिगप्रोफ | 29 | आवेदन समाप्त करें | हाँ |
सिग्क्ससीपीयू | 30 | आवेदन समाप्त करें (कोर डंप) | हाँ |
सिग्क्सएफएसजेड | 31 | आवेदन समाप्त करें (कोर डंप) | हाँ |
Linux में सिग्नल का जीवन चक्र
सिग्नल तीन चरणों से गुजरते हैं। वे मुख्य रूप से उत्पादन चरण में, कर्नेल या किसी प्रक्रिया द्वारा उत्पादित होते हैं, और एक संख्या द्वारा दर्शाए जाते हैं। वे हल्के और जल्दी से काम करते हैं, क्योंकि उन पर कोई अतिरिक्त भार नहीं होता है। लेकिन अगर आप पॉज़िक्स पक्ष को देखें, तो आप देखेंगे कि रीयल-टाइम सिग्नल अतिरिक्त डेटा संचारित कर सकते हैं।
संकेतों के लिए वितरण चरण उत्पादन चरण के बाद आता है। आम तौर पर, सिग्नल जितनी जल्दी हो सके कर्नेल से एप्लिकेशन तक पहुंचते हैं। हालांकि, कभी-कभी एप्लिकेशन महत्वपूर्ण संचालन करते समय सिग्नल को ब्लॉक कर सकते हैं। ऐसे मामलों में, लेन-देन होने तक सिग्नल लंबित रहता है।
संकेतों की तरह, प्रक्रियाएं भी लिनक्स पारिस्थितिकी तंत्र का एक अभिन्न अंग हैं। यदि आप एक Linux सिस्टम व्यवस्थापक बनने की योजना बना रहे हैं तो यह समझना महत्वपूर्ण है कि कौन सी प्रक्रियाएं हैं और वे कैसे काम करती हैं।
लिनक्स में एक प्रक्रिया क्या है?
आगे पढ़िए
संबंधित विषय
- लिनक्स
- लिनक्स कर्नेल
- तंत्र अध्यक्ष
लेखक के बारे में
एक इंजीनियर और सॉफ्टवेयर डेवलपर जो गणित और प्रौद्योगिकी का प्रशंसक है। उन्हें हमेशा कंप्यूटर, गणित और भौतिकी पसंद रही है। उन्होंने गेम इंजन प्रोजेक्ट के साथ-साथ मशीन लर्निंग, कृत्रिम तंत्रिका नेटवर्क और रैखिक बीजगणित पुस्तकालय विकसित किए हैं। इसके अलावा मशीन लर्निंग और लीनियर मैट्रिसेस पर काम करना जारी है।
हमारे न्यूज़लेटर की सदस्यता
तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!
सब्सक्राइब करने के लिए यहां क्लिक करें