सिग्नल (आईपीसी): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 62: Line 62:


== पॉज़िक्स सिग्नल ==
== पॉज़िक्स सिग्नल ==
नीचे दी गई सूची [[एकल यूनिक्स विशिष्टता]] में निर्दिष्ट सिग्नलों का दस्तावेजीकरण करती है। सभी सिग्नलों को मैक्रो स्थिरांक के रूप में परिभाषित किया गया है <code>&lt;signal.h></code> हेडर फाइल। स्थूल स्थिरांक के नाम में SIG [[उपसर्ग (भाषाविज्ञान)]] होता है जिसके बाद सिग्नल के लिए स्मरक नाम होता है।
नीचे दी गई सूची [[एकल यूनिक्स विशिष्टता]] में निर्दिष्ट सिग्नलों का दस्तावेजीकरण करती है। सभी सिग्नलों को <code>&lt;signal.h></code> हेडर फाइल में मैक्रो स्थिरांक के रूप में परिभाषित किया गया है। मैक्रो स्थिरांक के नाम में सिग [[उपसर्ग (भाषाविज्ञान)]] होता है जिसके बाद सिग्नल के लिए स्मरक नाम होता है।


; {{mono|{{vanchor|SIGABRT}}}} और {{mono|{{vanchor|SIGIOT}}}}
; {{mono|{{vanchor|SIGABRT}}}} और {{mono|{{vanchor|SIGIOT}}}}

Revision as of 18:51, 27 February 2023

सिग्नल विशिष्ट व्यवहार जैसे छोड़ने या त्रुटि प्रबंधन को ट्रिगर करने के लिए चल रहे कंप्यूटर प्रोग्राम को भेजे गए मानकीकृत संदेश हैं। वे अंतःप्रक्रम संचार (आईपीसी) का एक सीमित रूप हैं जो आमतौर पर यूनिक्स, यूनिक्स-जैसे और अन्य पोसिक्स- संगत ऑपरेटिंग सिस्टम में उपयोग किए जाते हैं।

एक संकेत एक अतुल्यकालिक सूचना है जो किसी प्रक्रिया (कंप्यूटिंग) को या किसी विशिष्ट थ्रेड (कंप्यूटर विज्ञान) को उसी प्रक्रिया के भीतर किसी घटना की सूचना देने के लिए भेजी जाती है। संकेतों के सामान्य उपयोग किसी प्रक्रिया को बाधित, निलंबित, समाप्त या समाप्त करना है। सिग्नल 1970 के बेल लैब्स यूनिक्स में उत्पन्न हुए और बाद में पोसिक्स मानक में निर्दिष्ट किया गया हैं।

जब सिग्नल भेजा जाता है, तो ऑपरेटिंग सिस्टम सिग्नल देने के लिए लक्ष्य प्रक्रिया के सामान्य नियंत्रण प्रवाह को बाधित करता है। किसी भी गैर-परमाणु निर्देश के दौरान निष्पादन को बाधित किया जा सकता है। अगर प्रक्रिया ने पहले सिग्नल हैंडलर पंजीकृत किया है, तो वह दिनचर्या निष्पादित की जाती है। अन्यथा, डिफ़ॉल्ट सिग्नल हैंडलर निष्पादित किया जाता है।

एंबेडेड प्रोग्राम अंतःप्रक्रम संचार के लिए उपयोगी सिग्नल पा सकते हैं, क्योंकि सिग्नल उनके एल्गोरिथम दक्षता के लिए उल्लेखनीय हैं।

सिग्नल बाधा डालना्स के समान हैं, अंतर यह है कि अवरोध्स सेंट्रल प्रोसेसिंग यूनिट द्वारा मध्यस्थ होते हैं और कर्नेल (ऑपरेटिंग सिस्टम) द्वारा नियंत्रित होते हैं जबकि सिग्नल कर्नेल द्वारा मध्यस्थ होते हैं (संभवतः सिस्टम कॉल के माध्यम से) और व्यक्तिगत प्रक्रिया (कंप्यूटिंग) द्वारा नियंत्रित होते हैं।[citation needed] कर्नेल रुकावट को उस प्रक्रिया के लिए सिग्नल के रूप में पारित कर सकता है जो इसे (सामान्य उदाहरण एसआईजीएसईजीवी, सिगबस, सिगिल और एसआईजीएफपीई हैं) उत्पन्न करता है।

इतिहास

संस्करण 1 यूनिक्स (1971) में अवरोध, क्विट और मशीन ट्रैप को पकड़ने के लिए अलग सिस्टम कॉल थे।

किल संस्करण 2 यूनिक्स (1972) में दिखाई दिया।

संस्करण 4 यूनिक्स (1973) ने सभी जालों को कॉल सिग्नल में संयोजित किया,

संस्करण 5 यूनिक्स (1974) मनमाने सिग्नल भेज सकता है।[1] संस्करण 7 यूनिक्स (1979) में प्रत्येक गिने हुए जाल को प्रतीकात्मक नाम मिला।

बेल लैब्स (मध्य 80 के दशक) से योजना 9 ने सिग्नलों को नोटों से बदल दिया, जो छोटे, मनमाना तार भेजने की अनुमति देते हैं।[2]


सिग्नल भेजना

यदि अनुमतियाँ अनुमति देती हैं, तो किल(2) सिस्टम कॉल एक निर्दिष्ट प्रक्रिया को एक निर्दिष्ट संकेत भेजता है। इसी प्रकार, किल (1) कमांड उपयोगकर्ता को प्रक्रियाओं को सिग्नल भेजने की अनुमति देता है। रेज़(3) लाइब्रेरी फ़ंक्शन वर्तमान प्रक्रिया को निर्दिष्ट सिग्नल भेजता है।

शून्य से विभाजन, विभाजन उल्लंघन (एसआईजीएसईजीवी), और फ़्लोटिंग पॉइंट अपवाद (एसआईजीएफपीई) द्वारा विभाजन जैसे अपवाद कोर निपात का कारण बनेगी और कार्यक्रम को समाप्त कर देगी।

कर्नेल घटनाओं की प्रक्रियाओं को सूचित करने के लिए सिग्नल उत्पन्न कर सकता है। उदाहरण के लिए, एसआईजीपीआईपीई उत्पन्न होगा जब प्रक्रिया पाइप को लिखती है जिसे पाठक द्वारा बंद कर दिया गया है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने का कारण बनता है, जो पाइपलाइन (यूनिक्स) का निर्माण करते समय सुविधाजनक होता है।

चल रही प्रक्रिया के कंप्यूटर टर्मिनल पर कुछ कुंजी संयोजनों को टाइप करने से सिस्टम इसे कुछ सिग्नल भेजता है:[3]

  • Ctrl-C (पुराने यूनिक्स में, डेल) इंट सिग्नल (अवरोध, सिगिनट) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने का कारण बनता है।
  • Ctrl-Z टीएसटीपी सिग्नल (टर्मिनल स्टॉप, एसआईजीएसटीपी) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को निष्पादन को निलंबित करने का कारण बनता है।[4]
  • Ctrl-\ क्विट सिग्नल (सिग्क्विट) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने और कोर को डंप करने का कारण बनता है।
  • Ctrl-T (सभी यूनिक्स पर समर्थित नहीं) इन्फो सिग्नल (सिगइन्फो) भेजता है; डिफ़ॉल्ट रूप से, और यदि कमांड द्वारा समर्थित है, तो यह ऑपरेटिंग सिस्टम को रनिंग कमांड के बारे में जानकारी दिखाने का कारण बनता है।[5]

आधुनिक ऑपरेटिंग सिस्टम के साथ इन डिफ़ॉल्ट कुंजी संयोजनों को एसटीटीवाई कमांड इसके साथ बदला जा सकता है।

सिग्नलों को संभालना

सिग्नल हैंडलर्स को सिग्नल (2) या सिग्नल(2) या सिग्नेक्शन(2)सिस्टम कॉल के साथ स्थापित किया जा सकता है। यदि किसी विशेष सिग्नल के लिए सिग्नल हैंडलर स्थापित नहीं है, तो डिफ़ॉल्ट हैंडलर का उपयोग किया जाता है। अन्यथा सिग्नल इंटरसेप्ट हो जाता है और सिग्नल हैंडलर प्रायुक्त हो जाता है। प्रक्रिया हैंडलर बनाए बिना दो डिफ़ॉल्ट व्यवहार भी निर्दिष्ट कर सकती है: सिग्नल (सिग_इग्न) को अनदेखा करें और डिफ़ॉल्ट सिग्नल हैंडलर (सिग_डीएफएल) का उपयोग करें। ऐसे दो सिग्नल हैं जिन्हें इंटरसेप्ट नहीं किया जा सकता है और सिगकिल और सिगस्टॉप को हैंडल किया जा सकता है।

जोखिम

सिग्नल हैंडलिंग दौड़ की स्थिति के लिए असुरक्षित है। सिग्नल अतुल्यकालिक होने के कारण, सिग्नल हैंडलिंग रूटीन के निष्पादन के दौरान अन्य सिग्नल (समान प्रकार का भी) प्रक्रिया को दिया जा सकता है। सिग्प्रोकमास्क(2) कॉल का उपयोग सिग्नलों की डिलीवरी को बंद और खुला करने के लिए किया जा सकता है। ब्लॉक किए गए सिग्नल अनब्लॉक होने तक प्रोसेस को डिलीवर नहीं किए जाते हैं। सिग्नल जिन्हें अनदेखा नहीं किया जा सकता है (सिगकिल और सिगस्टॉप) को अवरुद्ध नहीं किया जा सकता है।

सिग्नल किसी सिस्टम कॉल की प्रगति में रुकावट का कारण बन सकते हैं, इसे पीसीएलएसरिंग गैर-पारदर्शी पुनरारंभ को प्रबंधित करने के लिए एप्लिकेशन पर छोड़ देते हैं।

सिग्नल हैंडलर को इस तरह से लिखा जाना चाहिए जिससे कोई अवांछित दुष्प्रभाव न हो, उदाहरण के लिये इरनो परिवर्तन, सिग्नल मास्क परिवर्तन, सिग्नल स्वभाव परिवर्तन, और अन्य वैश्विक प्रक्रिया (कंप्यूटिंग) विशेषता परिवर्तन गैर-रीएन्ट्रेंट (उपनेमका) कार्यों का उपयोग, उदाहरण के लिए, मॉलोक या प्रिंटफ, अंदर के सिग्नल हैंडलर भी असुरक्षित हैं। विशेष रूप से, पॉज़िक्स विनिर्देश और लिनक्स मैन पेज सिग्नल(7) आवश्यकता है कि सिग्नल फ़ंक्शन से प्रत्यक्ष या अप्रत्यक्ष रूप से बुलाए गए सभी सिस्टम फ़ंक्शन एसिंक्स-सिग्नल सुरक्षित हैं।[6][7] सिग्नल-सेफ्टी(7) मैन पेज ऐसे एसिनसी-सिग्नल सेफ सिस्टम फ़ंक्शंस (व्यावहारिक रूप से सिस्टम कॉल) की सूची देता है, अन्यथा यह अपरिभाषित व्यवहार है।[8] यह सुझाव दिया जाता है कि बस कुछ volatile sig_atomic_t सिग्नल हैंडलर में चर, और इसे कहीं और परीक्षण करने के लिए सेट करें।[9]

इसके बजाय सिग्नल हैंडलर सिग्नल को सूचि (अमूर्त डेटा प्रकार) में डाल सकते हैं और तुरंत वापस लौट सकते हैं। मुख्य धागा तब तक निर्बाध रूप से जारी रहेगा जब तक कि सूचि से सिग्नल नहीं लिए जाते, जैसे कि घटना पाश में। यहां निर्बाध का मतलब है कि अवरुद्ध करना (कंप्यूटिंग) के संचालन समय से पहले वापस आ सकते हैं और पीसीएलएसआरिंग, जैसा कि ऊपर बताया गया है। सिग्नल को सूचि से मुख्य धागे पर संसाधित किया जाना चाहिए, न कि थ्रेड पूल पैटर्न द्वारा, क्योंकि यह अतुल्यकालिकता की समस्या को फिर से प्रस्तुत करता है। हालाँकि, केवल sig_atomic_t एसिनसी-सिग्नल सुरक्षित तरीके से सूचि का प्रबंधन संभव नहीं है, क्योंकि ऐसे वेरिएबल्स के लिए केवल ही रीड और राईट एटॉमिक होने की गारंटी है, इंक्रीमेंट्स या (fetch-and)-डिक्रीमेंट्स नहीं, जैसा कि लाइन के लिए आवश्यक होगा। इस प्रकार, प्रभावी रूप से, प्रति हैंडलर केवल सिग्नल को संसाधित होने तक sig_atomic_t के साथ सुरक्षित रूप से सूचिबद्ध किया जा सकता है।

हार्डवेयर अपवादों के साथ संबंध

प्रक्रिया (कंप्यूटिंग) के निष्पादन के परिणामस्वरूप हार्डवेयर अपवाद प्रबंधन की उत्पत्ति हो सकती है, उदाहरण के लिए, यदि प्रक्रिया शून्य से विभाजित करने का प्रयास करती है या पृष्ठ दोष उत्पन्न करती है।

यूनिक्स-जैसे ऑपरेटिंग सिस्टम में, यह घटना कर्नेल (कंप्यूटर साइंस) एक्सेप्शन हैंडलिंग को निष्पादित करने के लिए स्वचालित रूप से प्रोसेसर कॉन्टेक्स्ट (कंप्यूटिंग) को बदल देती है। कुछ अपवादों के मामले में, जैसे कि पृष्ठ दोष, कर्नेल के पास घटना को पूरी तरह से संभालने और प्रक्रिया के निष्पादन को फिर से शुरू करने के लिए पर्याप्त जानकारी है।

अन्य अपवाद, हालांकि, कर्नेल बुद्धिमानी से प्रक्रिया नहीं कर सकता है और इसके बजाय अपवाद हैंडलिंग ऑपरेशन को फॉल्टिंग प्रक्रिया के लिए स्थगित करना चाहिए। यह डिफरल सिग्नल मैकेनिज्म के माध्यम से प्राप्त किया जाता है, जिसमें कर्नेल प्रक्रिया को वर्तमान अपवाद के अनुरूप सिग्नल भेजता है। उदाहरण के लिए, यदि किसी प्रक्रिया ने x86 सीपीयू पर शून्य से पूर्णांक विभाजित करने का प्रयास किया है, तो विभाजन त्रुटि अपवाद उत्पन्न होगा और कर्नेल को प्रक्रिया में एसआईजीएफपीई सिग्नल भेजने का कारण बनेगा।

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

पॉज़िक्स सिग्नल

नीचे दी गई सूची एकल यूनिक्स विशिष्टता में निर्दिष्ट सिग्नलों का दस्तावेजीकरण करती है। सभी सिग्नलों को <signal.h> हेडर फाइल में मैक्रो स्थिरांक के रूप में परिभाषित किया गया है। मैक्रो स्थिरांक के नाम में सिग उपसर्ग (भाषाविज्ञान) होता है जिसके बाद सिग्नल के लिए स्मरक नाम होता है।

SIGABRT और SIGIOT
सिग्नल गर्भपात, सिग्नल इनपुट/आउटपुट ट्रैप
SIGABRT और SIGIOT सिग्नल प्रोसेस को भेजा जाता है जो उसे Abort (computing)|'abort', यानी टर्मिनेट करने के लिए कहता है। सिग्नल आमतौर पर प्रक्रिया द्वारा ही शुरू किया जाता है जब वह C प्रक्रिया नियंत्रण#abort| को कॉल करता हैabort()सी मानक पुस्तकालय का कार्य, लेकिन इसे किसी अन्य सिग्नल की तरह बाहर से प्रक्रिया में भेजा जा सकता है।
SIGALRM, SIGVTALRM और SIGPROF
सिग्नल अलार्म, सिग्नल वीटी अलार्म, सिग्नल प्रोफाइलिंग टाइमर अलार्म
SIGALRM, SIGVTALRM और SIGPROF सिग्नल प्रक्रिया को भेजे जाते हैं जब कॉल में निर्दिष्ट समय सीमा पूर्ववर्ती 'अलार्म' सेटिंग फ़ंक्शन (जैसे setitimer) बीत जाता है। SIGALRM तब भेजा जाता है जब वास्तविक या घड़ी का समय समाप्त हो जाता है। SIGVTALRM तब भेजा जाता है जब प्रक्रिया द्वारा उपयोग किया जाने वाला सीपीयू समय समाप्त हो जाता है। SIGPROF तब भेजा जाता है जब प्रक्रिया द्वारा उपयोग किया जाने वाला सीपीयू समय और प्रक्रिया की ओर से सिस्टम द्वारा उपयोग किया जाता है, अर्थात जब प्रोफाइलिंग टाइमर समाप्त हो जाता है।
SIGBUS
सिग्नल बस
सिगबस सिग्नल प्रक्रिया को भेजा जाता है जब यह 'बस त्रुटि' का कारण बनता है। सिग्नल भेजे जाने की ओर ले जाने वाली स्थितियाँ हैं, उदाहरण के लिए, गलत मेमोरी एक्सेस अलाइनमेंट या गैर-मौजूद भौतिक पता।
SIGCHLD
सिग्नल चाइल्ड
SIGCHLD सिग्नल प्रक्रिया को भेजा जाता है जब 'बाल प्रक्रिया' बाहर निकलता है (सिस्टम कॉल), बाधित होता है, या बाधित होने के बाद फिर से शुरू होता है। सिग्नल का सामान्य उपयोग ऑपरेटिंग सिस्टम को स्पष्ट कॉल के बिना इसकी समाप्ति के बाद चाइल्ड प्रोसेस द्वारा उपयोग किए जाने वाले संसाधनों को साफ करने का निर्देश देना है। wait सिस्टम कॉल।
SIGCONT
सिगनल जारी
SIGCONT सिग्नल ऑपरेटिंग सिस्टम को सिगस्टॉप या एसआईजीएसटीपी सिग्नल द्वारा पहले रोकी गई प्रक्रिया को 'जारी रखने' (पुनरारंभ) करने का निर्देश देता है। इस सिग्नल का महत्वपूर्ण उपयोग यूनिक्स खोल में नौकरी नियंत्रण (यूनिक्स) में है।
SIGFPE
सिग्नल फ़्लोटिंग-पॉइंट त्रुटि
एसआईजीएफपीई सिग्नल प्रक्रिया को भेजा जाता है जब फ्लोटिंग पॉइंट या पूर्णांक अंकगणितीय हार्डवेयर में असाधारण (लेकिन जरूरी नहीं कि गलत) स्थिति का पता लगाया गया हो। इसमें शून्य से विभाजन, फ्लोटिंग पॉइंट अंडरफ़्लो या ओवरफ़्लो, पूर्णांक ओवरफ़्लो, अमान्य ऑपरेशन या अचूक संगणना शामिल हो सकती है। हार्डवेयर के आधार पर व्यवहार भिन्न हो सकता है।
SIGHUP
सिग्नल हैंगअप
किसी प्रोसेस को SIGHUP सिग्नल तब भेजा जाता है जब उसका कंट्रोलिंग टर्मिनल बंद होता है। यह मूल रूप से RS-232 ड्रॉप ('हैंगअप') की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, इस सिग्नल का आमतौर पर मतलब होता है कि नियंत्रक टर्मिनल एमुलेटर बंद कर दिया गया है।[10] कई डेमॉन (सॉफ़्टवेयर) (जिनके पास कोई नियंत्रक टर्मिनल नहीं है) इस सिग्नल की प्राप्ति की व्याख्या उनकी कॉन्फ़िगरेशन फ़ाइलों को फिर से लोड करने और बाहर निकलने के बजाय उनके लॉगफ़ाइल्स को फ़्लश/पुनः खोलने के अनुरोध के रूप में करते हैं।[11] nohup कमांड है जो सिग्नल को अनदेखा करने के लिए कमांड बनाती है।
SIGILL
सिग्नल अवैध
सिगिल सिग्नल प्रक्रिया को भेजा जाता है जब यह 'अवैध', विकृत, अज्ञात, या विशेषाधिकार प्राप्त निर्देश (कंप्यूटर विज्ञान) को निष्पादित करने का प्रयास करता है।
SIGINT
सिग्नल व्यवधान
जब कोई उपयोगकर्ता प्रक्रिया को 'बाधित' करना चाहता है तो सिगिनट सिग्नल उसके नियंत्रण टर्मिनल द्वारा प्रक्रिया को भेजा जाता है। यह आमतौर पर Ctrl-C| दबाकर शुरू किया जाता हैCtrl+C, लेकिन कुछ सिस्टम पर, डिलीट कुंजी कैरेक्टर या ब्रेक कुंजी कुंजी का उपयोग किया जा सकता है।[12]
SIGKILL
सिग्नल मारो
सिगकिल सिग्नल प्रक्रिया को भेजा जाता है जिससे वह तुरंत समाप्त हो जाए ('किल')। SIGTERM और सिगिनट के विपरीत, इस सिग्नल को पकड़ा या अनदेखा नहीं किया जा सकता है, और प्राप्त करने वाली प्रक्रिया इस सिग्नल को प्राप्त करने पर कोई सफाई नहीं कर सकती है। निम्नलिखित अपवाद प्रायुक्त होते हैं:
  • ज़ोंबी प्रक्रियाओं को नहीं मारा जा सकता है क्योंकि वे पहले से ही मर चुके हैं और उनकी मूल प्रक्रियाओं का इंतजार कर रहे हैं।
  • जो प्रक्रियाएँ अवरुद्ध अवस्था में हैं, वे तब तक नहीं मरेंगी जब तक कि वे फिर से जाग न जाएँ।
  • init प्रक्रिया विशेष है: इसे ऐसे सिग्नल नहीं मिलते हैं कि यह संभालना नहीं चाहता है, और इस प्रकार यह सिगकिल को अनदेखा कर सकता है।[13] इस नियम का अपवाद है जबकि Linux पर init ptraced है।[14][15]
  • निर्बाध नींद प्रक्रिया सिगकिल भेजे जाने पर भी समाप्त (और इसके संसाधनों को मुक्त) नहीं कर सकती है। यह उन कुछ मामलों में से है जिसमें अस्थायी सॉफ़्टवेयर समस्या को हल करने के लिए UNIX सिस्टम को रीबूट करना पड़ सकता है।
सिगकिल का उपयोग अंतिम उपाय के रूप में किया जाता है जब अधिकांश सिस्टम शटडाउन (कंप्यूटिंग) प्रक्रियाओं में प्रक्रियाओं को समाप्त करते हैं यदि यह स्वेच्छा से SIGTERM के जवाब में बाहर नहीं निकलता है। कंप्यूटर शटडाउन प्रक्रिया को गति देने के लिए, Mac OS X 10.6, उर्फ ​​Mac OS X v10.6, सिगकिल को उन अनुप्रयोगों को भेजेगा, जिन्होंने स्वयं को साफ चिह्नित किया है, जिसके परिणामस्वरूप तेजी से शटडाउन समय, संभवतः, कोई बुरा प्रभाव नहीं है।[16] आदेश killall -9 समान, जबकि खतरनाक प्रभाव होता है, जब निष्पादित किया जाता है उदा। लिनक्स में; यह प्रोग्राम को सहेजे न गए डेटा को सहेजने नहीं देता है। इसके पास अन्य विकल्प हैं, और कोई नहीं के साथ, सुरक्षित SIGTERM सिग्नल का उपयोग करता है।
SIGPIPE
सिग्नल पाइप
एसआईजीपीआईपीई सिग्नल प्रक्रिया को भेजा जाता है जब यह पाइपलाइन (यूनिक्स) को दूसरे छोर से जुड़ी प्रक्रिया के बिना लिखने का प्रयास करता है।
SIGPOLL
सिग्नल पोल
स्पष्ट रूप से देखे गए फ़ाइल डिस्क्रिप्टर पर कोई घटना होने पर SIGPOLL सिग्नल भेजा जाता है।[17] इसका प्रभावी ढंग से उपयोग अतुल्यकालिक I/O अनुरोध करने की ओर जाता है क्योंकि कर्नेल कॉल करने वाले के स्थान पर डिस्क्रिप्टर को पोल करेगा। यह सक्रिय मतदान (कंप्यूटर विज्ञान) का विकल्प प्रदान करता है।
SIGRTMIN को SIGRTMAX
सिग्नल रीयल-टाइम न्यूनतम, सिग्नल रीयल-टाइम अधिकतम
SIGRTMIN से SIGRTMAX सिग्नल का उपयोग उपयोगकर्ता-परिभाषित उद्देश्यों के लिए किया जाना है। वे 'वास्तविक समय' सिग्नल हैं।
SIGQUIT
सिगनल बंद
SIGQUIT सिग्नल को उसके नियंत्रण टर्मिनल द्वारा प्रक्रिया में भेजा जाता है जब उपयोगकर्ता अनुरोध करता है कि प्रक्रिया 'छोड़' और कोर डंप करें।
SIGSEGV
सिग्नल विभाजन उल्लंघन
एसआईजीएसईजीवी सिग्नल प्रक्रिया को भेजा जाता है जब यह अमान्य वर्चुअल मेमोरी संदर्भ, या विखंडन दोष करता है, यानी जब यह 'सेगमेंटेशन उल्लंघन' करता है।[18]
SIGSTOP
सिग्नल स्टॉप
सिगस्टॉप सिग्नल ऑपरेटिंग सिस्टम को बाद में फिर से शुरू करने के लिए प्रक्रिया को 'स्टॉप' करने का निर्देश देता है।
SIGSYS
सिग्नल सिस्टम कॉल
SIGSYS सिग्नल प्रक्रिया को भेजा जाता है जब यह सिस्टम कॉल के लिए खराब तर्क पास करता है। व्यवहार में, इस तरह का सिग्नल शायद ही कभी सामने आता है क्योंकि अनुप्रयोग उनके लिए कॉल करने के लिए पुस्तकालयों (जैसे सी मानक पुस्तकालय) पर भरोसा करते हैं। SIGSYS उन अनुप्रयोगों द्वारा प्राप्त किया जा सकता है जो उन्हें प्रतिबंधित करने के लिए कॉन्फ़िगर किए गए Linux Seccomp सुरक्षा नियमों का उल्लंघन करते हैं। SIGSYS का उपयोग विदेशी सिस्टम कॉल का अनुकरण करने के लिए भी किया जा सकता है, उदा। लिनक्स पर विंडोज सिस्टम कॉल का अनुकरण करें।[19]
SIGTERM
सिग्नल समाप्त
SIGTERM सिग्नल को इसकी 'समाप्ति' का अनुरोध करने के लिए प्रक्रिया में भेजा जाता है। सिगकिल सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह प्रक्रिया को संसाधनों को जारी करने और उपयुक्त होने पर स्थिति को बचाने के लिए अच्छा समापन करने की अनुमति देता है। सिगिनट लगभग SIGTERM के समान है।
SIGTSTP
सिग्नल टर्मिनल स्टॉप
एसआईजीएसटीपी सिग्नल को 'स्टॉप' ('t'erminal 'st'o'p') के लिए अनुरोध करने के लिए 'टर्मिनल' को नियंत्रित करने के लिए प्रक्रिया को भेजा जाता है। यह आमतौर पर उपयोगकर्ता द्वारा Ctrl-Z | दबाकर शुरू किया जाता हैCtrl+Z. सिगस्टॉप के विपरीत, प्रक्रिया सिग्नल हैंडलर को सिग्नल के लिए पंजीकृत कर सकती है या सिग्नल को अनदेखा कर सकती है।
SIGTTIN और SIGTTOU
SIGTTIN और SIGTTOU सिग्नल प्रक्रिया को तब भेजे जाते हैं जब वह पृष्ठभूमि प्रक्रिया के दौरान टेलेटाइपराइटर से क्रमशः पढ़ने या लिखने का प्रयास करती है। आमतौर पर, ये सिग्नल केवल जॉब कंट्रोल (यूनिक्स) के तहत प्रक्रियाओं द्वारा प्राप्त होते हैं; डेमन (कंप्यूटर सॉफ्टवेयर) में नियंत्रक टर्मिनल नहीं होते हैं और इसलिए, इन सिग्नलों को कभी प्राप्त नहीं करना चाहिए।
SIGTRAP
सिग्नल ट्रैप
SIGTRAP सिग्नल प्रक्रिया को भेजा जाता है जब अपवाद (या 'ट्रैप') होता है: शर्त जिसके बारे में डिबगर ने सूचित करने का अनुरोध किया है – उदाहरण के लिए, जब विशेष उपनेमका निष्पादित किया जाता है, या जब विशेष चर (प्रोग्रामिंग) मान बदलता है।
SIGURG
तत्काल सिग्नल
SIGURG सिग्नल प्रक्रिया को भेजा जाता है जब बर्कले सॉकेट में पढ़ने के लिए 'अत्यावश्यक' या आउट-ऑफ-बैंड डेटा उपलब्ध होता है।
SIGUSR1 और SIGUSR2
सिग्नल यूजर 1, सिग्नल यूजर 2
SIGUSR1 और SIGUSR2 सिग्नल 'उपयोगकर्ता-परिभाषित स्थितियों' को इंगित करने के लिए प्रक्रिया में भेजे जाते हैं।
SIGXCPU
सिग्नल सीपीयू से अधिक हो गया
SIGXसीपीयू सिग्नल प्रक्रिया को भेजा जाता है जब उसने 'सीपीयू' का उपयोग उस अवधि के लिए किया है जो निश्चित पूर्व निर्धारित उपयोगकर्ता-सेटटेबल मान से 'अधिक' है।[20] SIGXसीपीयू सिग्नल का आगमन प्राप्त करने की प्रक्रिया को किसी भी मध्यवर्ती परिणाम को जल्दी से बचाने और सिगकिल सिग्नल का उपयोग करके ऑपरेटिंग सिस्टम द्वारा समाप्त किए जाने से पहले इनायत से बाहर निकलने का मौका प्रदान करता है।
SIGXFSZ
अतिरिक्त फ़ाइल आकार का सिग्नल दें
SIGXFSZ सिग्नल प्रक्रिया को भेजा जाता है जब यह 'फ़ाइल' बढ़ती है जो अधिकतम अनुमत 'आकार' से 'अधिक' होती है।
SIGWINCH
सिग्नल विंडो परिवर्तन
SIGWINCH सिग्नल प्रक्रिया को भेजा जाता है जब इसका नियंत्रक टर्मिनल अपना आकार बदलता है ('wind'dow' ch'ange)।[21]


डिफ़ॉल्ट कार्रवाई

प्रक्रिया सी सिग्नल हैंडलिंग को परिभाषित कर सकती है। यदि कोई प्रक्रिया सिग्नल के व्यवहार को परिभाषित नहीं करती है, तो उस सिग्नल के लिए डिफ़ॉल्ट हैंडलर का उपयोग किया जा रहा है। नीचे दी गई तालिका में पोसिक्स- संगत UNIX सिस्टम के लिए कुछ डिफ़ॉल्ट क्रियाओं की सूची दी गई है, जैसे FreeBSD, OpenBSD और Linux

Signal Portable
number
Default action Description
SIGABRT 6 Terminate (core dump) Process abort signal
SIGALRM 14 Terminate Alarm clock
सिगबस Terminate (core dump) Access to an undefined portion of a memory object
SIGCHLD Ignore Child process terminated, stopped, or continued
SIGCONT Continue Continue executing, if stopped
एसआईजीएफपीई 8 Terminate (core dump) Erroneous arithmetic operation
SIGHUP 1 Terminate Hangup
सिगिल 4 Terminate (core dump) Illegal instruction
सिगिनट 2 Terminate Terminal interrupt signal
सिगकिल 9 Terminate Kill (cannot be caught or ignored)
एसआईजीपीआईपीई 13 Terminate Write on a pipe with no one to read it
SIGPOLL Terminate Pollable event
SIGPROF Terminate Profiling timer expired
SIGQUIT 3 Terminate (core dump) Terminal quit signal
एसआईजीएसईजीवी 11 Terminate (core dump) Invalid memory reference
सिगस्टॉप Stop Stop executing (cannot be caught or ignored)
SIGSYS Terminate (core dump) Bad system call
SIGTERM 15 Terminate Termination signal
SIGTRAP 5 Terminate (core dump) Trace/breakpoint trap
एसआईजीएसटीपी Stop Terminal stop signal
SIGTTIN Stop Background process attempting read
SIGTTOU Stop Background process attempting write
SIGUSR1 Terminate User-defined signal 1
SIGUSR2 Terminate User-defined signal 2
SIGURG Ignore Out-of-band data is available at a socket
SIGVTALRM Terminate Virtual timer expired
SIGXसीपीयू Terminate (core dump) सीपीयू time limit exceeded
SIGXFSZ Terminate (core dump) File size limit exceeded
SIGWINCH Ignore Terminal window size changed
पोर्टेबल नंबर
अधिकांश सिग्नलों के लिए संबंधित सिग्नल संख्या कार्यान्वयन-परिभाषित है। यह कॉलम पॉज़िक्स मानक में निर्दिष्ट संख्याओं को सूचीबद्ध करता है।[22]
क्रियाएँ समझाई गईं
'समाप्त' – प्रक्रिया की असामान्य समाप्ति। प्रक्रिया को _exit() के सभी परिणामों के साथ समाप्त कर दिया गया है सिवाय इसके कि प्रतीक्षा () और प्रतीक्षापिड () को उपलब्ध कराई गई स्थिति निर्दिष्ट सिग्नल द्वारा असामान्य समाप्ति का सिग्नल देती है।
समाप्त (कोर डंप) – प्रक्रिया की असामान्य समाप्ति। इसके अतिरिक्त, कार्यान्वयन-परिभाषित असामान्य समाप्ति क्रियाएं, जैसे कोर फ़ाइल का निर्माण, हो सकता है।
अनदेखा करना – सिग्नल की उपेक्षा करें।
रुकना – प्रक्रिया को रोकें (या निलंबित करें)।
जारी रखना – प्रक्रिया जारी रखें, अगर इसे रोका जाता है; अन्यथा, सिग्नल पर ध्यान न दें।

विविध सिग्नल

निम्नलिखित सिग्नल पोसिक्स विनिर्देशन में निर्दिष्ट नहीं हैं। हालाँकि, वे कभी-कभी विभिन्न प्रणालियों पर उपयोग किए जाते हैं।

SIGEMT
जब एमुलेटर ट्रैप होता है तो SIGEMT सिग्नल प्रक्रिया को भेजा जाता है।
SIGINFO
SIGइन्फो सिग्नल प्रक्रिया को भेजा जाता है जब नियंत्रक टर्मिनल से स्थिति (सूचना) अनुरोध प्राप्त होता है।
SIGPWR
SIGPWR सिग्नल प्रक्रिया को भेजा जाता है जब सिस्टम बिजली की विफलता का अनुभव करता है।
SIGLOST
फ़ाइल लॉक खो जाने पर SIGLOST सिग्नल प्रक्रिया को भेजा जाता है।
SIGSTKFLT
SIGSTKFLT सिग्नल प्रक्रिया को भेजा जाता है जब सहसंसाधक स्टैक दोष का अनुभव करता है (यानी जब स्टैक खाली होता है तो पॉपिंग होता है या जब यह भर जाता है तो धक्का देता है)।[23] इसे परिभाषित किया गया है, लेकिन लिनक्स पर इसका उपयोग नहीं किया गया है, जहां x87 कोप्रोसेसर स्टैक दोष इसके बजाय एसआईजीएफपीई उत्पन्न करेगा।[24]
SIGUNUSED
SIGUNUSED सिग्नल प्रक्रिया को भेजा जाता है जब अप्रयुक्त सिस्टम कॉल नंबर के साथ सिस्टम कॉल किया जाता है। यह अधिकांश आर्किटेक्चर पर SIGSYS का पर्याय है।[23]; SIGCLD
SIGCLD सिग्नल SIGCHLD का पर्याय है।[23]


यह भी देखें

  • सी सिग्नल हैंडलिंग

संदर्भ

  1. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  2. Gagliardi, Pietro. "C Programming in Plan 9 from Bell Labs". doc.cat-v.org. Retrieved 22 January 2022.
  3. "Termination Signals". The GNU C Library).
  4. "Job Control Signals". The GNU C Library.
  5. "Miscellaneous Signals". The GNU C Library.
  6. "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: System Interfaces Chapter 2". pubs.opengroup.org. Retrieved 2020-12-20.
  7. "signal(7) - Linux manual page". man7.org. Retrieved 2020-12-20.
  8. "signal-safety(7) - Linux manual page". man7.org. Retrieved 2020-12-20.
  9. "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: <signal.h>". pubs.opengroup.org. Retrieved 2020-12-20.
  10. Michael Kerrisk (25 July 2009). "signal(7)". Linux Programmer's Manual (version 3.22). The Linux Kernel Archives. Retrieved 23 September 2009.
  11. "perlipc(1)". Perl Programmers Reference Guide, version 5.18. perldoc.perl.org - Official documentation for the Perl programming language. Retrieved 21 September 2013.
  12. "Proper handling of SIGINT and SIGQUIT". Retrieved 6 October 2012.
  13. https://manpages.ubuntu.com/manpages/zesty/man2/kill.2.html section NOTES
  14. "SIGKILL init process (PID 1)". Stack Overflow.
  15. "Can root kill init process?". Unix & Linux Stack Exchange.
  16. "Mac Dev Center: What's New in Mac OS X: Mac OS X v10.6". 2009-08-28. Retrieved 18 November 2017.
  17. "ioctl - controls a STREAM device". POSIX system call specification. The Open Group. Retrieved 19 June 2015.
  18. "What is a "segmentation violation"?". support.microfocus.com. Retrieved 2018-11-22.
  19. "Syscall User Dispatch – The Linux Kernel documentation". kernel.org. Retrieved 2021-02-11.
  20. "getrlimit, setrlimit - अधिकतम संसाधन खपत को नियंत्रित करें". POSIX system call specification. The Open Group. Retrieved 10 September 2009.
  21. Clausecker, Robert (2017-06-19). "0001151: Introduce new signal SIGWINCH and functions tcsetsize(), tcgetsize() to get/set terminal window size". Austin Group Defect Tracker. Austin Group. Retrieved 2017-10-12. Accepted As Marked
  22. "IEEE Std 1003.1-2017 - kill". IEEE, Open Group. The correspondence between integer values and the sig value used is shown in the following list. The effects of specifying any signal_number other than those listed below are undefined.
  23. 23.0 23.1 23.2 "signal(7) — Linux manual pages". manpages.courier-mta.org. Retrieved 2018-11-22.
  24. "Linux 3.0 x86_64: When is SIGSTKFLT raised?". Stack Overflow.


बाहरी संबंध