सिग्नल (आईपीसी): Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Form of inter-process communication in computer systems}} | {{short description|Form of inter-process communication in computer systems}} | ||
{{About| | {{About|आईपीसी के एक रूप के रूप में सिग्नल|घटना-संचालित प्रसंस्करण में सिग्नल|सिग्नल प्रोग्रामिंग}} | ||
सिग्नल विशिष्ट व्यवहार जैसे छोड़ने या त्रुटि प्रबंधन को ट्रिगर करने के लिए चल रहे [[कंप्यूटर प्रोग्राम]] को भेजे गए मानकीकृत संदेश हैं। वे [[अंतःप्रक्रम संचार]] (आईपीसी) का एक सीमित रूप हैं जो आमतौर पर [[यूनिक्स]], यूनिक्स-जैसे और अन्य [[POSIX|पोसिक्स]]- संगत ऑपरेटिंग सिस्टम में उपयोग किए जाते हैं। | |||
एक संकेत एक अतुल्यकालिक सूचना है जो किसी [[प्रक्रिया (कंप्यूटिंग)]] को या किसी विशिष्ट थ्रेड (कंप्यूटर विज्ञान) को उसी प्रक्रिया के भीतर किसी घटना की सूचना देने के लिए भेजी जाती है। संकेतों के सामान्य उपयोग किसी प्रक्रिया को बाधित, निलंबित, समाप्त या समाप्त करना है। सिग्नल 1970 के [[बेल लैब्स]] यूनिक्स में उत्पन्न हुए और बाद में पोसिक्स मानक में निर्दिष्ट किया गया हैं। | |||
जब सिग्नल भेजा जाता है, तो ऑपरेटिंग सिस्टम सिग्नल देने के लिए लक्ष्य प्रक्रिया के सामान्य नियंत्रण प्रवाह को बाधित करता है। किसी भी [[परमाणु संचालन|गैर-परमाणु]] निर्देश के दौरान निष्पादन को बाधित किया जा सकता है। अगर प्रक्रिया ने पहले सिग्नल हैंडलर पंजीकृत किया है, तो वह दिनचर्या निष्पादित की जाती है। अन्यथा, डिफ़ॉल्ट सिग्नल हैंडलर निष्पादित किया जाता है। | |||
सिग्नल [[बाधा डालना]]्स के समान हैं, अंतर यह है कि | एंबेडेड प्रोग्राम अंतःप्रक्रम संचार के लिए उपयोगी सिग्नल पा सकते हैं, क्योंकि सिग्नल उनके [[एल्गोरिथम दक्षता]] के लिए उल्लेखनीय हैं। | ||
सिग्नल [[बाधा डालना]]्स के समान हैं, अंतर यह है कि अवरोध्स सेंट्रल प्रोसेसिंग यूनिट द्वारा मध्यस्थ होते हैं और [[कर्नेल (ऑपरेटिंग सिस्टम)]] द्वारा नियंत्रित होते हैं जबकि सिग्नल कर्नेल द्वारा मध्यस्थ होते हैं (संभवतः सिस्टम कॉल के माध्यम से) और व्यक्तिगत प्रक्रिया (कंप्यूटिंग) द्वारा नियंत्रित होते हैं।{{cn |date=May 2022}} कर्नेल रुकावट को उस प्रक्रिया के लिए सिग्नल के रूप में पारित कर सकता है जो इसे (सामान्य उदाहरण [[SIGSEGV|एसआईजीएसईजीवी]], [[SIGBUS|सिगबस]], सिगिल और एसआईजीएफपीई हैं) उत्पन्न करता है। | |||
== इतिहास == | == इतिहास == | ||
[[संस्करण 1 यूनिक्स]] (1971) में | [[संस्करण 1 यूनिक्स]] (1971) में अवरोध, क्विट और मशीन ट्रैप को पकड़ने के लिए अलग [[सिस्टम कॉल]] थे। | ||
{{tt|किल}} [[संस्करण 2 यूनिक्स]] (1972) में दिखाई दिया। | |||
[[संस्करण 4 यूनिक्स]] (1973) ने सभी जालों को कॉल {{tt|सिग्नल}} में संयोजित किया, | |||
{{ | [[संस्करण 5 यूनिक्स]] (1974) मनमाने सिग्नल भेज सकता है।<ref name="reader">{{cite techreport |first1=M. D. |last1=McIlroy |author-link1=Doug McIlroy |year=1987 |url=https://www.cs.dartmouth.edu/~doug/reader.pdf |title=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}}</ref> [[संस्करण 7 यूनिक्स]] (1979) में प्रत्येक गिने हुए जाल को प्रतीकात्मक नाम मिला। | ||
बेल लैब्स (मध्य 80 के दशक) से योजना 9 ने सिग्नलों को नोटों से बदल दिया, जो छोटे, मनमाना तार भेजने की अनुमति देते हैं।<ref>{{cite web |last1=Gagliardi |first1=Pietro |title=C Programming in Plan 9 from Bell Labs |url=https://doc.cat-v.org/plan_9/programming/c_programming_in_plan_9 |website=doc.cat-v.org |access-date=22 January 2022}}</ref> | |||
'''सिग्नल भेजना''' | |||
यदि अनुमतियाँ अनुमति देती हैं, तो {{tt|[[किल (कमांड)|किल]](2)}} सिस्टम कॉल एक निर्दिष्ट प्रक्रिया को एक निर्दिष्ट संकेत भेजता है। इसी प्रकार, {{tt|[[किल (कमांड)|किल (1)]]}} कमांड उपयोगकर्ता को प्रक्रियाओं को सिग्नल भेजने की अनुमति देता है। {{tt|रेज़(3)}} लाइब्रेरी फ़ंक्शन वर्तमान प्रक्रिया को निर्दिष्ट सिग्नल भेजता है। | |||
[[शून्य से विभाजन]], [[विभाजन उल्लंघन]] ( | [[शून्य से विभाजन]], [[विभाजन उल्लंघन]] (एसआईजीएसईजीवी), और फ़्लोटिंग पॉइंट अपवाद (एसआईजीएफपीई) द्वारा विभाजन जैसे अपवाद [[कोर निपात]] का कारण बनेगी और कार्यक्रम को समाप्त कर देगी। | ||
कर्नेल घटनाओं की प्रक्रियाओं को सूचित करने के लिए | कर्नेल घटनाओं की प्रक्रियाओं को सूचित करने के लिए सिग्नल उत्पन्न कर सकता है। उदाहरण के लिए, एसआईजीपीआईपीई उत्पन्न होगा जब प्रक्रिया पाइप को लिखती है जिसे पाठक द्वारा बंद कर दिया गया है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने का कारण बनता है, जो [[पाइपलाइन (यूनिक्स)]] का निर्माण करते समय सुविधाजनक होता है। | ||
चल रही प्रक्रिया के [[कंप्यूटर टर्मिनल]] पर कुछ कुंजी संयोजनों को टाइप करने से सिस्टम इसे कुछ | चल रही प्रक्रिया के [[कंप्यूटर टर्मिनल]] पर कुछ कुंजी संयोजनों को टाइप करने से सिस्टम इसे कुछ सिग्नल भेजता है:<ref>{{cite web |title=Termination Signals |url=https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html |website=The GNU C Library)}}</ref> | ||
* [[Ctrl-C]] (पुराने यूनिक्स में, | * [[Ctrl-C]] (पुराने यूनिक्स में, डेल) इंट सिग्नल (अवरोध, सिगिनट) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने का कारण बनता है। | ||
* [[Ctrl-Z]] | * [[Ctrl-Z]] टीएसटीपी सिग्नल (टर्मिनल स्टॉप, [[SIGTSTP|एसआईजीएसटीपी]]) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को निष्पादन को निलंबित करने का कारण बनता है।<ref>{{cite web |title=Job Control Signals |url=https://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html |website=The GNU C Library}}</ref> | ||
* Ctrl-\ | * Ctrl-\ क्विट सिग्नल (सिग्क्विट) भेजता है; डिफ़ॉल्ट रूप से, यह प्रक्रिया को समाप्त करने और कोर को डंप करने का कारण बनता है। | ||
* [[स्थिति कुंजी | * [[स्थिति कुंजी|Ctrl-T]] (सभी यूनिक्स पर समर्थित नहीं) इन्फो सिग्नल (सिगइन्फो) भेजता है; डिफ़ॉल्ट रूप से, और यदि कमांड द्वारा समर्थित है, तो यह ऑपरेटिंग सिस्टम को रनिंग कमांड के बारे में जानकारी दिखाने का कारण बनता है।<ref>{{cite web |title=Miscellaneous Signals |url=https://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.html |website=The GNU C Library}}</ref> | ||
आधुनिक ऑपरेटिंग सिस्टम के साथ इन डिफ़ॉल्ट कुंजी संयोजनों को | आधुनिक ऑपरेटिंग सिस्टम के साथ इन डिफ़ॉल्ट कुंजी संयोजनों को {{tt|[[stty]]}} कमांड इसके साथ बदला जा सकता है। | ||
== | == सिग्नलों को संभालना == | ||
सिगनल हैंडलर्स को sigaction| के साथ स्थापित किया जा सकता है{{tt|signal(2)}} या {{tt|sigaction(2)}}सिस्टम कॉल। यदि किसी विशेष सिग्नल के लिए सिग्नल हैंडलर स्थापित नहीं है, तो डिफ़ॉल्ट हैंडलर का उपयोग किया जाता है। अन्यथा सिग्नल इंटरसेप्ट हो जाता है और सिग्नल हैंडलर लागू हो जाता है। प्रक्रिया हैंडलर बनाए बिना दो डिफ़ॉल्ट व्यवहार भी निर्दिष्ट कर सकती है: सिग्नल (SIG_IGN) को अनदेखा करें और डिफ़ॉल्ट सिग्नल हैंडलर (SIG_DFL) का उपयोग करें। दो सिग्नल हैं जिन्हें इंटरसेप्ट और हैंडल नहीं किया जा सकता है: #SIGKILL और [[SIGSTOP]]। | सिगनल हैंडलर्स को sigaction| के साथ स्थापित किया जा सकता है{{tt|signal(2)}} या {{tt|sigaction(2)}}सिस्टम कॉल। यदि किसी विशेष सिग्नल के लिए सिग्नल हैंडलर स्थापित नहीं है, तो डिफ़ॉल्ट हैंडलर का उपयोग किया जाता है। अन्यथा सिग्नल इंटरसेप्ट हो जाता है और सिग्नल हैंडलर लागू हो जाता है। प्रक्रिया हैंडलर बनाए बिना दो डिफ़ॉल्ट व्यवहार भी निर्दिष्ट कर सकती है: सिग्नल (SIG_IGN) को अनदेखा करें और डिफ़ॉल्ट सिग्नल हैंडलर (SIG_DFL) का उपयोग करें। दो सिग्नल हैं जिन्हें इंटरसेप्ट और हैंडल नहीं किया जा सकता है: #SIGKILL और [[SIGSTOP]]। | ||
=== जोखिम === | === जोखिम === | ||
सिग्नल हैंडलिंग [[दौड़ की स्थिति]] के लिए असुरक्षित है। सिग्नल अतुल्यकालिक होने के कारण, सिग्नल हैंडलिंग रूटीन के निष्पादन के दौरान अन्य सिग्नल (समान प्रकार का भी) प्रक्रिया को दिया जा सकता है। {{tt|sigprocmask(2)}} }} कॉल का उपयोग | सिग्नल हैंडलिंग [[दौड़ की स्थिति]] के लिए असुरक्षित है। सिग्नल अतुल्यकालिक होने के कारण, सिग्नल हैंडलिंग रूटीन के निष्पादन के दौरान अन्य सिग्नल (समान प्रकार का भी) प्रक्रिया को दिया जा सकता है। {{tt|sigprocmask(2)}}<nowiki> }} कॉल का उपयोग सिग्नलों की डिलीवरी को ब्लॉक और अनब्लॉक करने के लिए किया जा सकता है। ब्लॉक किए गए सिग्नल अनब्लॉक होने तक प्रोसेस को डिलीवर नहीं किए जाते हैं। सिग्नल जिन्हें अनदेखा नहीं किया जा सकता है (सिगकिल और सिगस्टॉप) को अवरुद्ध नहीं किया जा सकता है।</nowiki> | ||
सिग्नल किसी सिस्टम कॉल की प्रगति में रुकावट का कारण बन सकते हैं, इसे [[PCLSRing]] | गैर-पारदर्शी पुनरारंभ को प्रबंधित करने के लिए एप्लिकेशन पर छोड़ देते हैं। | सिग्नल किसी सिस्टम कॉल की प्रगति में रुकावट का कारण बन सकते हैं, इसे [[PCLSRing]] | गैर-पारदर्शी पुनरारंभ को प्रबंधित करने के लिए एप्लिकेशन पर छोड़ देते हैं। | ||
Line 52: | Line 56: | ||
यूनिक्स-जैसे ऑपरेटिंग सिस्टम में, यह घटना कर्नेल (कंप्यूटर साइंस) एक्सेप्शन हैंडलिंग को निष्पादित करने के लिए स्वचालित रूप से प्रोसेसर कॉन्टेक्स्ट (कंप्यूटिंग) को बदल देती है। कुछ अपवादों के मामले में, जैसे कि पृष्ठ दोष, कर्नेल के पास घटना को पूरी तरह से संभालने और प्रक्रिया के निष्पादन को फिर से शुरू करने के लिए पर्याप्त जानकारी है। | यूनिक्स-जैसे ऑपरेटिंग सिस्टम में, यह घटना कर्नेल (कंप्यूटर साइंस) एक्सेप्शन हैंडलिंग को निष्पादित करने के लिए स्वचालित रूप से प्रोसेसर कॉन्टेक्स्ट (कंप्यूटिंग) को बदल देती है। कुछ अपवादों के मामले में, जैसे कि पृष्ठ दोष, कर्नेल के पास घटना को पूरी तरह से संभालने और प्रक्रिया के निष्पादन को फिर से शुरू करने के लिए पर्याप्त जानकारी है। | ||
अन्य अपवाद, हालांकि, कर्नेल बुद्धिमानी से प्रक्रिया नहीं कर सकता है और इसके बजाय अपवाद हैंडलिंग ऑपरेशन को फॉल्टिंग प्रक्रिया के लिए स्थगित करना चाहिए। यह डिफरल सिग्नल मैकेनिज्म के माध्यम से प्राप्त किया जाता है, जिसमें कर्नेल प्रक्रिया को वर्तमान अपवाद के अनुरूप सिग्नल भेजता है। उदाहरण के लिए, यदि किसी प्रक्रिया ने x[[86]] [[CPU]] पर शून्य से पूर्णांक विभाजित करने का प्रयास किया है, तो विभाजन त्रुटि अपवाद उत्पन्न होगा और कर्नेल को प्रक्रिया में [[SIGFPE]] सिग्नल भेजने का कारण बनेगा। | अन्य अपवाद, हालांकि, कर्नेल बुद्धिमानी से प्रक्रिया नहीं कर सकता है और इसके बजाय अपवाद हैंडलिंग ऑपरेशन को फॉल्टिंग प्रक्रिया के लिए स्थगित करना चाहिए। यह डिफरल सिग्नल मैकेनिज्म के माध्यम से प्राप्त किया जाता है, जिसमें कर्नेल प्रक्रिया को वर्तमान अपवाद के अनुरूप सिग्नल भेजता है। उदाहरण के लिए, यदि किसी प्रक्रिया ने x[[86]] [[CPU]] पर शून्य से पूर्णांक विभाजित करने का प्रयास किया है, तो विभाजन त्रुटि अपवाद उत्पन्न होगा और कर्नेल को प्रक्रिया में [[SIGFPE|एसआईजीएफपीई]] सिग्नल भेजने का कारण बनेगा। | ||
इसी तरह, यदि प्रक्रिया अपने [[आभासी पता स्थान]] के बाहर मेमोरी एड्रेस तक पहुंचने का प्रयास करती है, तो कर्नेल इस उल्लंघन की प्रक्रिया को | इसी तरह, यदि प्रक्रिया अपने [[आभासी पता स्थान]] के बाहर मेमोरी एड्रेस तक पहुंचने का प्रयास करती है, तो कर्नेल इस उल्लंघन की प्रक्रिया को एसआईजीएसईजीवी ([[segfault]] सिग्नल) के माध्यम से सूचित करेगा। सिग्नल नामों और अपवादों के बीच सटीक मैपिंग स्पष्ट रूप से सीपीयू पर निर्भर है, क्योंकि आर्किटेक्चर के बीच अपवाद प्रकार भिन्न होते हैं। | ||
== पॉज़िक्स सिग्नल == | == पॉज़िक्स सिग्नल == | ||
नीचे दी गई सूची [[एकल यूनिक्स विशिष्टता]] में निर्दिष्ट | नीचे दी गई सूची [[एकल यूनिक्स विशिष्टता]] में निर्दिष्ट सिग्नलों का दस्तावेजीकरण करती है। सभी सिग्नलों को मैक्रो स्थिरांक के रूप में परिभाषित किया गया है <code><signal.h></code> हेडर फाइल। स्थूल स्थिरांक के नाम में SIG [[उपसर्ग (भाषाविज्ञान)]] होता है जिसके बाद सिग्नल के लिए स्मरक नाम होता है। | ||
; {{mono|{{vanchor|SIGABRT}}}} और {{mono|{{vanchor|SIGIOT}}}} | ; {{mono|{{vanchor|SIGABRT}}}} और {{mono|{{vanchor|SIGIOT}}}} | ||
Line 67: | Line 71: | ||
; {{mono|{{vanchor|SIGBUS}}}} | ; {{mono|{{vanchor|SIGBUS}}}} | ||
: सिग्नल बस | : सिग्नल बस | ||
: | : सिगबस सिग्नल प्रक्रिया को भेजा जाता है जब यह '[[बस त्रुटि]]' का कारण बनता है। सिग्नल भेजे जाने की ओर ले जाने वाली स्थितियाँ हैं, उदाहरण के लिए, गलत मेमोरी एक्सेस अलाइनमेंट या गैर-मौजूद भौतिक पता। | ||
; {{mono|{{vanchor|SIGCHLD}}}} | ; {{mono|{{vanchor|SIGCHLD}}}} | ||
: सिग्नल चाइल्ड | : सिग्नल चाइल्ड | ||
Line 73: | Line 77: | ||
; {{mono|{{vanchor|SIGCONT}}}} | ; {{mono|{{vanchor|SIGCONT}}}} | ||
: सिगनल जारी | : सिगनल जारी | ||
: [[SIGCONT]] सिग्नल ऑपरेटिंग सिस्टम को SIGSTOP या | : [[SIGCONT]] सिग्नल ऑपरेटिंग सिस्टम को SIGSTOP या एसआईजीएसटीपी सिग्नल द्वारा पहले रोकी गई प्रक्रिया को 'जारी रखने' (पुनरारंभ) करने का निर्देश देता है। इस सिग्नल का महत्वपूर्ण उपयोग [[यूनिक्स खोल]] में [[नौकरी नियंत्रण (यूनिक्स)]] में है। | ||
; {{mono|{{vanchor|SIGFPE}}}} | ; {{mono|{{vanchor|SIGFPE}}}} | ||
: सिग्नल [[फ़्लोटिंग-पॉइंट त्रुटि]] | : सिग्नल [[फ़्लोटिंग-पॉइंट त्रुटि]] | ||
: | : एसआईजीएफपीई सिग्नल प्रक्रिया को भेजा जाता है जब फ्लोटिंग पॉइंट या पूर्णांक अंकगणितीय हार्डवेयर में असाधारण (लेकिन जरूरी नहीं कि गलत) स्थिति का पता लगाया गया हो। इसमें शून्य से विभाजन, फ्लोटिंग पॉइंट अंडरफ़्लो या ओवरफ़्लो, पूर्णांक ओवरफ़्लो, अमान्य ऑपरेशन या अचूक संगणना शामिल हो सकती है। हार्डवेयर के आधार पर व्यवहार भिन्न हो सकता है। | ||
; {{mono|{{vanchor|SIGHUP}}}} | ; {{mono|{{vanchor|SIGHUP}}}} | ||
: सिग्नल हैंगअप | : सिग्नल हैंगअप | ||
: किसी प्रोसेस को [[SIGHUP]] सिग्नल तब भेजा जाता है जब उसका कंट्रोलिंग टर्मिनल बंद होता है। यह मूल रूप से [[RS-232]] ड्रॉप ('हैंगअप') की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, इस | : किसी प्रोसेस को [[SIGHUP]] सिग्नल तब भेजा जाता है जब उसका कंट्रोलिंग टर्मिनल बंद होता है। यह मूल रूप से [[RS-232]] ड्रॉप ('हैंगअप') की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, इस सिग्नल का आमतौर पर मतलब होता है कि नियंत्रक [[टर्मिनल एमुलेटर]] बंद कर दिया गया है।<ref name="linux-signal7">{{cite web |url=https://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html|title=signal(7) |work=[[Linux Programmer's Manual]] (version 3.22)|author=Michael Kerrisk | date=25 July 2009|publisher=The Linux Kernel Archives|access-date=23 September 2009}}</ref> कई डेमॉन (सॉफ़्टवेयर) (जिनके पास कोई नियंत्रक टर्मिनल नहीं है) इस सिग्नल की प्राप्ति की व्याख्या उनकी कॉन्फ़िगरेशन फ़ाइलों को फिर से लोड करने और बाहर निकलने के बजाय उनके लॉगफ़ाइल्स को फ़्लश/पुनः खोलने के अनुरोध के रूप में करते हैं।<ref>{{cite web|title=perlipc(1)|url=https://perldoc.perl.org/perlipc.html#Handling-the-SIGHUP-Signal-in-Daemons|work=Perl Programmers Reference Guide, version 5.18|publisher=perldoc.perl.org - Official documentation for the Perl programming language|access-date=21 September 2013}}</ref> [[nohup]] कमांड है जो सिग्नल को अनदेखा करने के लिए कमांड बनाती है। | ||
; {{mono|{{vanchor|SIGILL}}}} | ; {{mono|{{vanchor|SIGILL}}}} | ||
: सिग्नल अवैध | : सिग्नल अवैध | ||
: | : सिगिल सिग्नल प्रक्रिया को भेजा जाता है जब यह 'अवैध', विकृत, अज्ञात, या विशेषाधिकार प्राप्त [[निर्देश (कंप्यूटर विज्ञान)]] को निष्पादित करने का प्रयास करता है। | ||
; {{mono|{{vanchor|SIGINT}}}} | ; {{mono|{{vanchor|SIGINT}}}} | ||
: सिग्नल व्यवधान | : सिग्नल व्यवधान | ||
: जब कोई उपयोगकर्ता प्रक्रिया को 'बाधित' करना चाहता है तो | : जब कोई उपयोगकर्ता प्रक्रिया को 'बाधित' करना चाहता है तो सिगिनट सिग्नल उसके नियंत्रण टर्मिनल द्वारा प्रक्रिया को भेजा जाता है। यह आमतौर पर Ctrl-C| दबाकर शुरू किया जाता है{{keypress|Ctrl|C}}, लेकिन कुछ सिस्टम पर, डिलीट कुंजी कैरेक्टर या ब्रेक कुंजी कुंजी का उपयोग किया जा सकता है।<ref>{{cite web | url=https://www.cons.org/cracauer/sigint.html | title=Proper handling of SIGINT and SIGQUIT | access-date=6 October 2012}}</ref> | ||
; {{mono|{{vanchor|SIGKILL}}}} | ; {{mono|{{vanchor|SIGKILL}}}} | ||
: सिग्नल मारो | : सिग्नल मारो | ||
: SIGKILL सिग्नल प्रक्रिया को भेजा जाता है जिससे वह तुरंत समाप्त हो जाए ('किल')। SIGTERM और | : SIGKILL सिग्नल प्रक्रिया को भेजा जाता है जिससे वह तुरंत समाप्त हो जाए ('किल')। SIGTERM और सिगिनट के विपरीत, इस सिग्नल को पकड़ा या अनदेखा नहीं किया जा सकता है, और प्राप्त करने वाली प्रक्रिया इस सिग्नल को प्राप्त करने पर कोई सफाई नहीं कर सकती है। निम्नलिखित अपवाद लागू होते हैं: | ||
:* [[ज़ोंबी प्रक्रिया]]ओं को नहीं मारा जा सकता है क्योंकि वे पहले से ही मर चुके हैं और उनकी मूल प्रक्रियाओं का इंतजार कर रहे हैं। | :* [[ज़ोंबी प्रक्रिया]]ओं को नहीं मारा जा सकता है क्योंकि वे पहले से ही मर चुके हैं और उनकी मूल प्रक्रियाओं का इंतजार कर रहे हैं। | ||
:* जो प्रक्रियाएँ अवरुद्ध अवस्था में हैं, वे तब तक नहीं मरेंगी जब तक कि वे फिर से जाग न जाएँ। | :* जो प्रक्रियाएँ अवरुद्ध अवस्था में हैं, वे तब तक नहीं मरेंगी जब तक कि वे फिर से जाग न जाएँ। | ||
:* [[init]] प्रक्रिया विशेष है: इसे ऐसे | :* [[init]] प्रक्रिया विशेष है: इसे ऐसे सिग्नल नहीं मिलते हैं कि यह संभालना नहीं चाहता है, और इस प्रकार यह SIGKILL को अनदेखा कर सकता है।<ref>https://manpages.ubuntu.com/manpages/zesty/man2/kill.2.html section NOTES</ref> इस नियम का अपवाद है जबकि Linux पर init [[ptrace]]d है।<ref>{{cite web|url=https://stackoverflow.com/a/21031583|title=SIGKILL init process (PID 1)|website=Stack Overflow}}</ref><ref>{{cite web|url=https://unix.stackexchange.com/a/308429|title=Can root kill init process?|website=Unix & Linux Stack Exchange}}</ref> | ||
:* निर्बाध नींद प्रक्रिया SIGKILL भेजे जाने पर भी समाप्त (और इसके संसाधनों को मुक्त) नहीं कर सकती है। यह उन कुछ मामलों में से है जिसमें अस्थायी सॉफ़्टवेयर समस्या को हल करने के लिए UNIX सिस्टम को रीबूट करना पड़ सकता है। | :* निर्बाध नींद प्रक्रिया SIGKILL भेजे जाने पर भी समाप्त (और इसके संसाधनों को मुक्त) नहीं कर सकती है। यह उन कुछ मामलों में से है जिसमें अस्थायी सॉफ़्टवेयर समस्या को हल करने के लिए UNIX सिस्टम को रीबूट करना पड़ सकता है। | ||
: SIGKILL का उपयोग अंतिम उपाय के रूप में किया जाता है जब अधिकांश सिस्टम [[शटडाउन (कंप्यूटिंग)]] प्रक्रियाओं में प्रक्रियाओं को समाप्त करते हैं यदि यह स्वेच्छा से SIGTERM के जवाब में बाहर नहीं निकलता है। कंप्यूटर शटडाउन प्रक्रिया को गति देने के लिए, Mac OS X 10.6, उर्फ Mac OS X v10.6, SIGKILL को उन अनुप्रयोगों को भेजेगा, जिन्होंने स्वयं को साफ चिह्नित किया है, जिसके परिणामस्वरूप तेजी से शटडाउन समय, संभवतः, कोई बुरा प्रभाव नहीं है।<ref>{{cite web | url = https://developer.apple.com/mac/library/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html#//apple_ref/doc/uid/TP40008898-SW22 | title = Mac Dev Center: What's New in Mac OS X: Mac OS X v10.6 | date = 2009-08-28 | access-date =18 November 2017}}</ref> आदेश {{code|killall -9}} समान, जबकि खतरनाक प्रभाव होता है, जब निष्पादित किया जाता है उदा। लिनक्स में; यह प्रोग्राम को सहेजे न गए डेटा को सहेजने नहीं देता है। इसके पास अन्य विकल्प हैं, और कोई नहीं के साथ, सुरक्षित SIGTERM सिग्नल का उपयोग करता है। | : SIGKILL का उपयोग अंतिम उपाय के रूप में किया जाता है जब अधिकांश सिस्टम [[शटडाउन (कंप्यूटिंग)]] प्रक्रियाओं में प्रक्रियाओं को समाप्त करते हैं यदि यह स्वेच्छा से SIGTERM के जवाब में बाहर नहीं निकलता है। कंप्यूटर शटडाउन प्रक्रिया को गति देने के लिए, Mac OS X 10.6, उर्फ Mac OS X v10.6, SIGKILL को उन अनुप्रयोगों को भेजेगा, जिन्होंने स्वयं को साफ चिह्नित किया है, जिसके परिणामस्वरूप तेजी से शटडाउन समय, संभवतः, कोई बुरा प्रभाव नहीं है।<ref>{{cite web | url = https://developer.apple.com/mac/library/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html#//apple_ref/doc/uid/TP40008898-SW22 | title = Mac Dev Center: What's New in Mac OS X: Mac OS X v10.6 | date = 2009-08-28 | access-date =18 November 2017}}</ref> आदेश {{code|killall -9}} समान, जबकि खतरनाक प्रभाव होता है, जब निष्पादित किया जाता है उदा। लिनक्स में; यह प्रोग्राम को सहेजे न गए डेटा को सहेजने नहीं देता है। इसके पास अन्य विकल्प हैं, और कोई नहीं के साथ, सुरक्षित SIGTERM सिग्नल का उपयोग करता है। | ||
; {{mono|{{vanchor|SIGPIPE}}}} | ; {{mono|{{vanchor|SIGPIPE}}}} | ||
: सिग्नल पाइप | : सिग्नल पाइप | ||
: | : एसआईजीपीआईपीई सिग्नल प्रक्रिया को भेजा जाता है जब यह पाइपलाइन (यूनिक्स) को दूसरे छोर से जुड़ी प्रक्रिया के बिना लिखने का प्रयास करता है। | ||
; {{mono|{{vanchor|SIGPOLL}}}} | ; {{mono|{{vanchor|SIGPOLL}}}} | ||
: सिग्नल पोल | : सिग्नल पोल | ||
Line 102: | Line 106: | ||
; {{mono|{{vanchor|SIGRTMIN}}}} को {{mono|{{vanchor|SIGRTMAX}}}} | ; {{mono|{{vanchor|SIGRTMIN}}}} को {{mono|{{vanchor|SIGRTMAX}}}} | ||
: सिग्नल रीयल-टाइम न्यूनतम, सिग्नल रीयल-टाइम अधिकतम | : सिग्नल रीयल-टाइम न्यूनतम, सिग्नल रीयल-टाइम अधिकतम | ||
: SIGRTMIN से SIGRTMAX सिग्नल का उपयोग उपयोगकर्ता-परिभाषित उद्देश्यों के लिए किया जाना है। वे 'वास्तविक समय' | : SIGRTMIN से SIGRTMAX सिग्नल का उपयोग उपयोगकर्ता-परिभाषित उद्देश्यों के लिए किया जाना है। वे 'वास्तविक समय' सिग्नल हैं। | ||
; {{mono|{{vanchor|SIGQUIT}}}} | ; {{mono|{{vanchor|SIGQUIT}}}} | ||
: सिगनल बंद | : सिगनल बंद | ||
Line 108: | Line 112: | ||
; {{mono|{{vanchor|SIGSEGV}}}} | ; {{mono|{{vanchor|SIGSEGV}}}} | ||
: सिग्नल विभाजन उल्लंघन | : सिग्नल विभाजन उल्लंघन | ||
: | : एसआईजीएसईजीवी सिग्नल प्रक्रिया को भेजा जाता है जब यह अमान्य वर्चुअल मेमोरी संदर्भ, या [[विखंडन दोष]] करता है, यानी जब यह 'सेगमेंटेशन उल्लंघन' करता है।<ref>{{Cite web|url=https://support.microfocus.com/kb/doc.php?id=7001662|title=What is a "segmentation violation"?|website=support.microfocus.com|access-date=2018-11-22}}</ref> | ||
; {{mono|{{vanchor|SIGSTOP}}}} | ; {{mono|{{vanchor|SIGSTOP}}}} | ||
: सिग्नल स्टॉप | : सिग्नल स्टॉप | ||
Line 114: | Line 118: | ||
; {{mono|{{vanchor|SIGSYS}}}} | ; {{mono|{{vanchor|SIGSYS}}}} | ||
: सिग्नल सिस्टम कॉल | : सिग्नल सिस्टम कॉल | ||
: SIGSYS सिग्नल प्रक्रिया को भेजा जाता है जब यह सिस्टम कॉल के लिए खराब तर्क पास करता है। व्यवहार में, इस तरह का | : SIGSYS सिग्नल प्रक्रिया को भेजा जाता है जब यह सिस्टम कॉल के लिए खराब तर्क पास करता है। व्यवहार में, इस तरह का सिग्नल शायद ही कभी सामने आता है क्योंकि अनुप्रयोग उनके लिए कॉल करने के लिए पुस्तकालयों (जैसे [[सी मानक पुस्तकालय]]) पर भरोसा करते हैं। SIGSYS उन अनुप्रयोगों द्वारा प्राप्त किया जा सकता है जो उन्हें प्रतिबंधित करने के लिए कॉन्फ़िगर किए गए Linux [[Seccomp]] सुरक्षा नियमों का उल्लंघन करते हैं। SIGSYS का उपयोग विदेशी सिस्टम कॉल का अनुकरण करने के लिए भी किया जा सकता है, उदा। लिनक्स पर विंडोज सिस्टम कॉल का अनुकरण करें।<ref>{{Cite web|title=Syscall User Dispatch – The Linux Kernel documentation|url=https://www.kernel.org/doc/html/latest/admin-guide/syscall-user-dispatch.html|access-date=2021-02-11|website=kernel.org}}</ref> | ||
; {{mono|{{vanchor|SIGTERM}}}} | ; {{mono|{{vanchor|SIGTERM}}}} | ||
: सिग्नल समाप्त | : सिग्नल समाप्त | ||
: SIGTERM सिग्नल को इसकी 'समाप्ति' का अनुरोध करने के लिए प्रक्रिया में भेजा जाता है। SIGKILL सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह प्रक्रिया को संसाधनों को जारी करने और उपयुक्त होने पर स्थिति को बचाने के लिए अच्छा समापन करने की अनुमति देता है। | : SIGTERM सिग्नल को इसकी 'समाप्ति' का अनुरोध करने के लिए प्रक्रिया में भेजा जाता है। SIGKILL सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह प्रक्रिया को संसाधनों को जारी करने और उपयुक्त होने पर स्थिति को बचाने के लिए अच्छा समापन करने की अनुमति देता है। सिगिनट लगभग SIGTERM के समान है। | ||
; {{mono|{{vanchor|SIGTSTP}}}} | ; {{mono|{{vanchor|SIGTSTP}}}} | ||
: सिग्नल टर्मिनल स्टॉप | : सिग्नल टर्मिनल स्टॉप | ||
: | : एसआईजीएसटीपी सिग्नल को 'स्टॉप' ('t'erminal 'st'o'p') के लिए अनुरोध करने के लिए 'टर्मिनल' को नियंत्रित करने के लिए प्रक्रिया को भेजा जाता है। यह आमतौर पर उपयोगकर्ता द्वारा Ctrl-Z | दबाकर शुरू किया जाता है{{keypress|Ctrl|Z}}. SIGSTOP के विपरीत, प्रक्रिया सिग्नल हैंडलर को सिग्नल के लिए पंजीकृत कर सकती है या सिग्नल को अनदेखा कर सकती है। | ||
; {{mono|{{vanchor|SIGTTIN}}}} और {{mono|{{vanchor|SIGTTOU}}}} | ; {{mono|{{vanchor|SIGTTIN}}}} और {{mono|{{vanchor|SIGTTOU}}}} | ||
: [[SIGTTIN]] और [[SIGTTOU]] सिग्नल प्रक्रिया को तब भेजे जाते हैं जब वह [[पृष्ठभूमि प्रक्रिया]] के दौरान टेलेटाइपराइटर से क्रमशः पढ़ने या लिखने का प्रयास करती है। आमतौर पर, ये | : [[SIGTTIN]] और [[SIGTTOU]] सिग्नल प्रक्रिया को तब भेजे जाते हैं जब वह [[पृष्ठभूमि प्रक्रिया]] के दौरान टेलेटाइपराइटर से क्रमशः पढ़ने या लिखने का प्रयास करती है। आमतौर पर, ये सिग्नल केवल जॉब कंट्रोल (यूनिक्स) के तहत प्रक्रियाओं द्वारा प्राप्त होते हैं; [[डेमन (कंप्यूटर सॉफ्टवेयर)]] में नियंत्रक टर्मिनल नहीं होते हैं और इसलिए, इन सिग्नलों को कभी प्राप्त नहीं करना चाहिए। | ||
; {{mono|{{vanchor|SIGTRAP}}}} | ; {{mono|{{vanchor|SIGTRAP}}}} | ||
: सिग्नल ट्रैप | : सिग्नल ट्रैप | ||
: SIGTRAP सिग्नल प्रक्रिया को भेजा जाता है जब अपवाद (या 'ट्रैप') होता है: शर्त जिसके बारे में [[डिबगर]] ने सूचित करने का अनुरोध किया है{{snd}} उदाहरण के लिए, जब विशेष उपनेमका निष्पादित किया जाता है, या जब विशेष [[चर (प्रोग्रामिंग)]] मान बदलता है। | : SIGTRAP सिग्नल प्रक्रिया को भेजा जाता है जब अपवाद (या 'ट्रैप') होता है: शर्त जिसके बारे में [[डिबगर]] ने सूचित करने का अनुरोध किया है{{snd}} उदाहरण के लिए, जब विशेष उपनेमका निष्पादित किया जाता है, या जब विशेष [[चर (प्रोग्रामिंग)]] मान बदलता है। | ||
; {{mono|{{vanchor|SIGURG}}}} | ; {{mono|{{vanchor|SIGURG}}}} | ||
: तत्काल | : तत्काल सिग्नल | ||
: [[SIGURG]] सिग्नल प्रक्रिया को भेजा जाता है जब [[बर्कले सॉकेट]] में पढ़ने के लिए 'अत्यावश्यक' या [[आउट-ऑफ-बैंड डेटा]] उपलब्ध होता है। | : [[SIGURG]] सिग्नल प्रक्रिया को भेजा जाता है जब [[बर्कले सॉकेट]] में पढ़ने के लिए 'अत्यावश्यक' या [[आउट-ऑफ-बैंड डेटा]] उपलब्ध होता है। | ||
; {{mono|{{vanchor|SIGUSR1}}}} और {{mono|{{vanchor|SIGUSR2}}}} | ; {{mono|{{vanchor|SIGUSR1}}}} और {{mono|{{vanchor|SIGUSR2}}}} | ||
Line 136: | Line 140: | ||
: SIGXCPU सिग्नल प्रक्रिया को भेजा जाता है जब उसने 'CPU' का उपयोग उस अवधि के लिए किया है जो निश्चित पूर्व निर्धारित उपयोगकर्ता-सेटटेबल मान से 'अधिक' है।<ref name="setrlimit_posix_spec">{{cite web | title = getrlimit, setrlimit - अधिकतम संसाधन खपत को नियंत्रित करें| work=[[POSIX]] system call specification | publisher=[[The Open Group]] | url=https://pubs.opengroup.org/onlinepubs/009695399/functions/getrlimit.html | access-date = 10 September 2009}}</ref> SIGXCPU सिग्नल का आगमन प्राप्त करने की प्रक्रिया को किसी भी मध्यवर्ती परिणाम को जल्दी से बचाने और SIGKILL सिग्नल का उपयोग करके ऑपरेटिंग सिस्टम द्वारा समाप्त किए जाने से पहले इनायत से बाहर निकलने का मौका प्रदान करता है। | : SIGXCPU सिग्नल प्रक्रिया को भेजा जाता है जब उसने 'CPU' का उपयोग उस अवधि के लिए किया है जो निश्चित पूर्व निर्धारित उपयोगकर्ता-सेटटेबल मान से 'अधिक' है।<ref name="setrlimit_posix_spec">{{cite web | title = getrlimit, setrlimit - अधिकतम संसाधन खपत को नियंत्रित करें| work=[[POSIX]] system call specification | publisher=[[The Open Group]] | url=https://pubs.opengroup.org/onlinepubs/009695399/functions/getrlimit.html | access-date = 10 September 2009}}</ref> SIGXCPU सिग्नल का आगमन प्राप्त करने की प्रक्रिया को किसी भी मध्यवर्ती परिणाम को जल्दी से बचाने और SIGKILL सिग्नल का उपयोग करके ऑपरेटिंग सिस्टम द्वारा समाप्त किए जाने से पहले इनायत से बाहर निकलने का मौका प्रदान करता है। | ||
; {{mono|{{vanchor|SIGXFSZ}}}} | ; {{mono|{{vanchor|SIGXFSZ}}}} | ||
: अतिरिक्त फ़ाइल आकार का | : अतिरिक्त फ़ाइल आकार का सिग्नल दें | ||
: SIGXFSZ सिग्नल प्रक्रिया को भेजा जाता है जब यह 'फ़ाइल' बढ़ती है जो अधिकतम अनुमत 'आकार' से 'अधिक' होती है। | : SIGXFSZ सिग्नल प्रक्रिया को भेजा जाता है जब यह 'फ़ाइल' बढ़ती है जो अधिकतम अनुमत 'आकार' से 'अधिक' होती है। | ||
; {{mono|{{vanchor|SIGWINCH}}}} | ; {{mono|{{vanchor|SIGWINCH}}}} | ||
Line 144: | Line 148: | ||
=== डिफ़ॉल्ट कार्रवाई === | === डिफ़ॉल्ट कार्रवाई === | ||
प्रक्रिया [[सी सिग्नल हैंडलिंग]] को परिभाषित कर सकती है। यदि कोई प्रक्रिया सिग्नल के व्यवहार को परिभाषित नहीं करती है, तो उस सिग्नल के लिए डिफ़ॉल्ट हैंडलर का उपयोग किया जा रहा है। नीचे दी गई तालिका में | प्रक्रिया [[सी सिग्नल हैंडलिंग]] को परिभाषित कर सकती है। यदि कोई प्रक्रिया सिग्नल के व्यवहार को परिभाषित नहीं करती है, तो उस सिग्नल के लिए डिफ़ॉल्ट हैंडलर का उपयोग किया जा रहा है। नीचे दी गई तालिका में पोसिक्स- संगत UNIX सिस्टम के लिए कुछ डिफ़ॉल्ट क्रियाओं की सूची दी गई है, जैसे [[FreeBSD]], [[OpenBSD]] और [[Linux]]। | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
Line 154: | Line 158: | ||
| SIGALRM || style="text-align:right" | 14 || {{terminated|Terminate}} || Alarm clock | | SIGALRM || style="text-align:right" | 14 || {{terminated|Terminate}} || Alarm clock | ||
|- | |- | ||
| | | सिगबस || {{n/a}} || {{terminated|Terminate}} (core dump) || Access to an undefined portion of a memory object | ||
|- | |- | ||
| SIGCHLD || {{n/a}} || style="text-align:center" | Ignore || Child process terminated, stopped, or continued | | SIGCHLD || {{n/a}} || style="text-align:center" | Ignore || Child process terminated, stopped, or continued | ||
Line 160: | Line 164: | ||
| SIGCONT || {{n/a}} || style="text-align:center" | Continue || Continue executing, if stopped | | SIGCONT || {{n/a}} || style="text-align:center" | Continue || Continue executing, if stopped | ||
|- | |- | ||
| | | एसआईजीएफपीई || style="text-align:right" | 8 || {{terminated|Terminate}} (core dump) || Erroneous arithmetic operation | ||
|- | |- | ||
| SIGHUP || style="text-align:right" | 1 || {{terminated|Terminate}} || Hangup | | SIGHUP || style="text-align:right" | 1 || {{terminated|Terminate}} || Hangup | ||
|- | |- | ||
| | | सिगिल || style="text-align:right" | 4 || {{terminated|Terminate}} (core dump) || Illegal instruction | ||
|- | |- | ||
| | | सिगिनट || style="text-align:right" | 2 || {{terminated|Terminate}} || Terminal interrupt signal | ||
|- | |- | ||
| SIGKILL || style="text-align:right" | 9 || {{terminated|Terminate}} || Kill (cannot be caught or ignored) | | SIGKILL || style="text-align:right" | 9 || {{terminated|Terminate}} || Kill (cannot be caught or ignored) | ||
|- | |- | ||
| | | एसआईजीपीआईपीई || style="text-align:right" | 13 || {{terminated|Terminate}} || Write on a pipe with no one to read it | ||
|- | |- | ||
| SIGPOLL || {{n/a}} || {{terminated|Terminate}} || Pollable event | | SIGPOLL || {{n/a}} || {{terminated|Terminate}} || Pollable event | ||
Line 178: | Line 182: | ||
| SIGQUIT || style="text-align:right" | 3 || {{terminated|Terminate}} (core dump) || Terminal quit signal | | SIGQUIT || style="text-align:right" | 3 || {{terminated|Terminate}} (core dump) || Terminal quit signal | ||
|- | |- | ||
| | | एसआईजीएसईजीवी || style="text-align:right" | 11 || {{terminated|Terminate}} (core dump) || Invalid memory reference | ||
|- | |- | ||
| SIGSTOP || {{n/a}} || {{dropped|Stop}} || Stop executing (cannot be caught or ignored) | | SIGSTOP || {{n/a}} || {{dropped|Stop}} || Stop executing (cannot be caught or ignored) | ||
Line 188: | Line 192: | ||
| SIGTRAP || style="text-align:right" | 5 || {{terminated|Terminate}} (core dump) || Trace/breakpoint trap | | SIGTRAP || style="text-align:right" | 5 || {{terminated|Terminate}} (core dump) || Trace/breakpoint trap | ||
|- | |- | ||
| | | एसआईजीएसटीपी || {{n/a}} || {{dropped|Stop}} || Terminal stop signal | ||
|- | |- | ||
| SIGTTIN || {{n/a}} || {{dropped|Stop}} || Background process attempting read | | SIGTTIN || {{n/a}} || {{dropped|Stop}} || Background process attempting read | ||
Line 209: | Line 213: | ||
|} | |} | ||
; पोर्टेबल नंबर: | ; पोर्टेबल नंबर: | ||
: अधिकांश | : अधिकांश सिग्नलों के लिए संबंधित सिग्नल संख्या कार्यान्वयन-परिभाषित है। यह कॉलम पॉज़िक्स मानक में निर्दिष्ट संख्याओं को सूचीबद्ध करता है।<ref>{{cite web|title=IEEE Std 1003.1-2017 - kill|url=https://pubs.opengroup.org/onlinepubs/9699919799/utilities/kill.html|publisher=IEEE, Open Group|quote=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.}}</ref> | ||
; क्रियाएँ समझाई गईं: | ; क्रियाएँ समझाई गईं: | ||
: 'समाप्त'{{snd}} प्रक्रिया की असामान्य समाप्ति। प्रक्रिया को _exit() के सभी परिणामों के साथ समाप्त कर दिया गया है सिवाय इसके कि प्रतीक्षा () और प्रतीक्षापिड () को उपलब्ध कराई गई स्थिति निर्दिष्ट | : 'समाप्त'{{snd}} प्रक्रिया की असामान्य समाप्ति। प्रक्रिया को _exit() के सभी परिणामों के साथ समाप्त कर दिया गया है सिवाय इसके कि प्रतीक्षा () और प्रतीक्षापिड () को उपलब्ध कराई गई स्थिति निर्दिष्ट सिग्नल द्वारा असामान्य समाप्ति का सिग्नल देती है। | ||
: समाप्त (कोर डंप){{snd}} प्रक्रिया की असामान्य समाप्ति। इसके अतिरिक्त, कार्यान्वयन-परिभाषित असामान्य समाप्ति क्रियाएं, जैसे कोर फ़ाइल का निर्माण, हो सकता है। | : समाप्त (कोर डंप){{snd}} प्रक्रिया की असामान्य समाप्ति। इसके अतिरिक्त, कार्यान्वयन-परिभाषित असामान्य समाप्ति क्रियाएं, जैसे कोर फ़ाइल का निर्माण, हो सकता है। | ||
: अनदेखा करना{{snd}} | : अनदेखा करना{{snd}} सिग्नल की उपेक्षा करें। | ||
: रुकना{{snd}} प्रक्रिया को रोकें (या निलंबित करें)। | : रुकना{{snd}} प्रक्रिया को रोकें (या निलंबित करें)। | ||
: जारी रखना{{snd}} प्रक्रिया जारी रखें, अगर इसे रोका जाता है; अन्यथा, | : जारी रखना{{snd}} प्रक्रिया जारी रखें, अगर इसे रोका जाता है; अन्यथा, सिग्नल पर ध्यान न दें। | ||
== विविध | == विविध सिग्नल == | ||
निम्नलिखित | निम्नलिखित सिग्नल पोसिक्स विनिर्देशन में निर्दिष्ट नहीं हैं। हालाँकि, वे कभी-कभी विभिन्न प्रणालियों पर उपयोग किए जाते हैं। | ||
; {{mono|{{vanchor|SIGEMT}}}} | ; {{mono|{{vanchor|SIGEMT}}}} | ||
: जब एमुलेटर ट्रैप होता है तो SIGEMT सिग्नल प्रक्रिया को भेजा जाता है। | : जब एमुलेटर ट्रैप होता है तो SIGEMT सिग्नल प्रक्रिया को भेजा जाता है। | ||
; {{mono|{{vanchor|SIGINFO}}}} | ; {{mono|{{vanchor|SIGINFO}}}} | ||
: | : SIGइन्फो सिग्नल प्रक्रिया को भेजा जाता है जब नियंत्रक टर्मिनल से स्थिति (सूचना) अनुरोध प्राप्त होता है। | ||
; {{mono|{{vanchor|SIGPWR}}}} | ; {{mono|{{vanchor|SIGPWR}}}} | ||
: SIGPWR सिग्नल प्रक्रिया को भेजा जाता है जब सिस्टम [[बिजली की विफलता]] का अनुभव करता है। | : SIGPWR सिग्नल प्रक्रिया को भेजा जाता है जब सिस्टम [[बिजली की विफलता]] का अनुभव करता है। | ||
Line 229: | Line 233: | ||
: फ़ाइल लॉक खो जाने पर SIGLOST सिग्नल प्रक्रिया को भेजा जाता है। | : फ़ाइल लॉक खो जाने पर SIGLOST सिग्नल प्रक्रिया को भेजा जाता है। | ||
; {{mono|{{vanchor|SIGSTKFLT}}}} | ; {{mono|{{vanchor|SIGSTKFLT}}}} | ||
: SIGSTKFLT सिग्नल प्रक्रिया को भेजा जाता है जब सहसंसाधक स्टैक दोष का अनुभव करता है (यानी जब स्टैक खाली होता है तो पॉपिंग होता है या जब यह भर जाता है तो धक्का देता है)।<ref name="courier-mta.org">{{Cite web|url=https://manpages.courier-mta.org/htmlman7/signal.7.html|title=signal(7) — Linux manual pages|website=manpages.courier-mta.org|access-date=2018-11-22}}</ref> इसे परिभाषित किया गया है, लेकिन लिनक्स पर इसका उपयोग नहीं किया गया है, जहां [[x87]] कोप्रोसेसर स्टैक दोष इसके बजाय | : SIGSTKFLT सिग्नल प्रक्रिया को भेजा जाता है जब सहसंसाधक स्टैक दोष का अनुभव करता है (यानी जब स्टैक खाली होता है तो पॉपिंग होता है या जब यह भर जाता है तो धक्का देता है)।<ref name="courier-mta.org">{{Cite web|url=https://manpages.courier-mta.org/htmlman7/signal.7.html|title=signal(7) — Linux manual pages|website=manpages.courier-mta.org|access-date=2018-11-22}}</ref> इसे परिभाषित किया गया है, लेकिन लिनक्स पर इसका उपयोग नहीं किया गया है, जहां [[x87]] कोप्रोसेसर स्टैक दोष इसके बजाय एसआईजीएफपीई उत्पन्न करेगा।<ref>{{cite web|url=https://stackoverflow.com/questions/9332864/linux-3-0-x86-64-when-is-sigstkflt-raised#comment51557777_9333099|title=Linux 3.0 x86_64: When is SIGSTKFLT raised?|website=Stack Overflow}}</ref> | ||
; {{mono|{{vanchor|SIGUNUSED}}}} | ; {{mono|{{vanchor|SIGUNUSED}}}} | ||
: SIGUNUSED सिग्नल प्रक्रिया को भेजा जाता है जब अप्रयुक्त सिस्टम कॉल नंबर के साथ सिस्टम कॉल किया जाता है। यह अधिकांश आर्किटेक्चर पर SIGSYS का पर्याय है।<ref name="courier-mta.org"/>; {{mono|{{vanchor|SIGCLD}}}} | : SIGUNUSED सिग्नल प्रक्रिया को भेजा जाता है जब अप्रयुक्त सिस्टम कॉल नंबर के साथ सिस्टम कॉल किया जाता है। यह अधिकांश आर्किटेक्चर पर SIGSYS का पर्याय है।<ref name="courier-mta.org"/>; {{mono|{{vanchor|SIGCLD}}}} | ||
Line 249: | Line 253: | ||
* Introduction To Unix Signals Programming {{webarchive |url=https://web.archive.org/web/20130926005901/http://users.actcom.co.il/~choo/lupg/tutorials/signals/signals-programming.html |date=26 September 2013 |title=Introduction To Unix Signals Programming }} | * Introduction To Unix Signals Programming {{webarchive |url=https://web.archive.org/web/20130926005901/http://users.actcom.co.il/~choo/lupg/tutorials/signals/signals-programming.html |date=26 September 2013 |title=Introduction To Unix Signals Programming }} | ||
* [https://www.linuxprogrammingblog.com/all-about-linux-signals Another Introduction to Unix Signals Programming] (blog post, 2009) | * [https://www.linuxprogrammingblog.com/all-about-linux-signals Another Introduction to Unix Signals Programming] (blog post, 2009) | ||
* [http://www.enderunix.org/docs/signals.pdf UNIX and Reliable | * [http://www.enderunix.org/docs/signals.pdf UNIX and Reliable पोसिक्स Signals] by Baris Simsek | ||
* [https://www.openbsd.org/papers/opencon04/index.html Signal Handlers] by Henning Brauer | * [https://www.openbsd.org/papers/opencon04/index.html Signal Handlers] by Henning Brauer | ||
Revision as of 18:04, 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]
आधुनिक ऑपरेटिंग सिस्टम के साथ इन डिफ़ॉल्ट कुंजी संयोजनों को stty कमांड इसके साथ बदला जा सकता है।
सिग्नलों को संभालना
सिगनल हैंडलर्स को sigaction| के साथ स्थापित किया जा सकता हैsignal(2) या sigaction(2)सिस्टम कॉल। यदि किसी विशेष सिग्नल के लिए सिग्नल हैंडलर स्थापित नहीं है, तो डिफ़ॉल्ट हैंडलर का उपयोग किया जाता है। अन्यथा सिग्नल इंटरसेप्ट हो जाता है और सिग्नल हैंडलर लागू हो जाता है। प्रक्रिया हैंडलर बनाए बिना दो डिफ़ॉल्ट व्यवहार भी निर्दिष्ट कर सकती है: सिग्नल (SIG_IGN) को अनदेखा करें और डिफ़ॉल्ट सिग्नल हैंडलर (SIG_DFL) का उपयोग करें। दो सिग्नल हैं जिन्हें इंटरसेप्ट और हैंडल नहीं किया जा सकता है: #SIGKILL और SIGSTOP।
जोखिम
सिग्नल हैंडलिंग दौड़ की स्थिति के लिए असुरक्षित है। सिग्नल अतुल्यकालिक होने के कारण, सिग्नल हैंडलिंग रूटीन के निष्पादन के दौरान अन्य सिग्नल (समान प्रकार का भी) प्रक्रिया को दिया जा सकता है। sigprocmask(2) }} कॉल का उपयोग सिग्नलों की डिलीवरी को ब्लॉक और अनब्लॉक करने के लिए किया जा सकता है। ब्लॉक किए गए सिग्नल अनब्लॉक होने तक प्रोसेस को डिलीवर नहीं किए जाते हैं। सिग्नल जिन्हें अनदेखा नहीं किया जा सकता है (सिगकिल और सिगस्टॉप) को अवरुद्ध नहीं किया जा सकता है।
सिग्नल किसी सिस्टम कॉल की प्रगति में रुकावट का कारण बन सकते हैं, इसे PCLSRing | गैर-पारदर्शी पुनरारंभ को प्रबंधित करने के लिए एप्लिकेशन पर छोड़ देते हैं।
सिग्नल हैंडलर को इस तरह से लिखा जाना चाहिए जिससे कोई अवांछित दुष्प्रभाव न हो, उदा। errno परिवर्तन, सिग्नल मास्क परिवर्तन, सिग्नल स्वभाव परिवर्तन, और अन्य वैश्विक प्रक्रिया (कंप्यूटिंग) विशेषता परिवर्तन। गैर-रीएन्ट्रेंट (उपनेमका) कार्यों का उपयोग, उदाहरण के लिए, malloc या printf, अंदर के सिग्नल हैंडलर भी असुरक्षित हैं। विशेष रूप से, पॉज़िक्स विनिर्देश और लिनक्स मैन पेज signal (7) आवश्यकता है कि सिग्नल फ़ंक्शन से प्रत्यक्ष या अप्रत्यक्ष रूप से बुलाए गए सभी सिस्टम फ़ंक्शन एसिंक्स-सिग्नल सुरक्षित हैं।[6][7] signal-safety(7) }} मैन पेज ऐसे async-सिग्नल सेफ सिस्टम फ़ंक्शंस (व्यावहारिक रूप से सिस्टम कॉल) की सूची देता है, अन्यथा यह अपरिभाषित व्यवहार है।[8] यह सुझाव दिया जाता है कि बस कुछ सेट करें volatile sig_atomic_t
सिग्नल हैंडलर में चर, और इसे कहीं और परीक्षण करने के लिए।[9]
इसके बजाय सिग्नल हैंडलर सिग्नल को कतार (अमूर्त डेटा प्रकार) में डाल सकते हैं और तुरंत वापस लौट सकते हैं। मुख्य धागा तब तक निर्बाध रूप से जारी रहेगा जब तक कि कतार से सिग्नल नहीं लिए जाते, जैसे कि घटना पाश में। यहां निर्बाध का मतलब है कि अवरुद्ध करना (कंप्यूटिंग) के संचालन समय से पहले वापस आ सकते हैं और पीसीएलएसआरिंग, जैसा कि ऊपर बताया गया है। सिग्नल को कतार से मुख्य धागे पर संसाधित किया जाना चाहिए, न कि थ्रेड पूल पैटर्न द्वारा, क्योंकि यह अतुल्यकालिकता की समस्या को फिर से प्रस्तुत करता है। हालाँकि, केवल async-सिग्नल सुरक्षित तरीके से कतार का प्रबंधन संभव नहीं है sig_atomic_t, क्योंकि ऐसे वेरिएबल्स के लिए केवल ही रीड और राईट एटॉमिक होने की गारंटी है, इंक्रीमेंट्स या (fetch-and)-डिक्रीमेंट्स नहीं, जैसा कि कतार के लिए आवश्यक होगा। इस प्रकार, प्रभावी रूप से, प्रति हैंडलर केवल सिग्नल को सुरक्षित रूप से कतारबद्ध किया जा सकता है sig_atomic_t जब तक इसे संसाधित नहीं किया गया है।
हार्डवेयर अपवादों के साथ संबंध
प्रक्रिया (कंप्यूटिंग) के निष्पादन के परिणामस्वरूप हार्डवेयर अपवाद प्रबंधन की उत्पत्ति हो सकती है, उदाहरण के लिए, यदि प्रक्रिया शून्य से विभाजित करने का प्रयास करती है या पृष्ठ दोष उत्पन्न करती है।
यूनिक्स-जैसे ऑपरेटिंग सिस्टम में, यह घटना कर्नेल (कंप्यूटर साइंस) एक्सेप्शन हैंडलिंग को निष्पादित करने के लिए स्वचालित रूप से प्रोसेसर कॉन्टेक्स्ट (कंप्यूटिंग) को बदल देती है। कुछ अपवादों के मामले में, जैसे कि पृष्ठ दोष, कर्नेल के पास घटना को पूरी तरह से संभालने और प्रक्रिया के निष्पादन को फिर से शुरू करने के लिए पर्याप्त जानकारी है।
अन्य अपवाद, हालांकि, कर्नेल बुद्धिमानी से प्रक्रिया नहीं कर सकता है और इसके बजाय अपवाद हैंडलिंग ऑपरेशन को फॉल्टिंग प्रक्रिया के लिए स्थगित करना चाहिए। यह डिफरल सिग्नल मैकेनिज्म के माध्यम से प्राप्त किया जाता है, जिसमें कर्नेल प्रक्रिया को वर्तमान अपवाद के अनुरूप सिग्नल भेजता है। उदाहरण के लिए, यदि किसी प्रक्रिया ने x86 CPU पर शून्य से पूर्णांक विभाजित करने का प्रयास किया है, तो विभाजन त्रुटि अपवाद उत्पन्न होगा और कर्नेल को प्रक्रिया में एसआईजीएफपीई सिग्नल भेजने का कारण बनेगा।
इसी तरह, यदि प्रक्रिया अपने आभासी पता स्थान के बाहर मेमोरी एड्रेस तक पहुंचने का प्रयास करती है, तो कर्नेल इस उल्लंघन की प्रक्रिया को एसआईजीएसईजीवी (segfault सिग्नल) के माध्यम से सूचित करेगा। सिग्नल नामों और अपवादों के बीच सटीक मैपिंग स्पष्ट रूप से सीपीयू पर निर्भर है, क्योंकि आर्किटेक्चर के बीच अपवाद प्रकार भिन्न होते हैं।
पॉज़िक्स सिग्नल
नीचे दी गई सूची एकल यूनिक्स विशिष्टता में निर्दिष्ट सिग्नलों का दस्तावेजीकरण करती है। सभी सिग्नलों को मैक्रो स्थिरांक के रूप में परिभाषित किया गया है <signal.h>
हेडर फाइल। स्थूल स्थिरांक के नाम में SIG उपसर्ग (भाषाविज्ञान) होता है जिसके बाद सिग्नल के लिए स्मरक नाम होता है।
- SIGABRT और SIGIOT
- सिग्नल गर्भपात, सिग्नल इनपुट/आउटपुट ट्रैप
- SIGABRT और SIGIOT सिग्नल प्रोसेस को भेजा जाता है जो उसे Abort (computing)|'abort', यानी टर्मिनेट करने के लिए कहता है। सिग्नल आमतौर पर प्रक्रिया द्वारा ही शुरू किया जाता है जब वह C प्रक्रिया नियंत्रण#abort| को कॉल करता है
abort()
सी मानक पुस्तकालय का कार्य, लेकिन इसे किसी अन्य सिग्नल की तरह बाहर से प्रक्रिया में भेजा जा सकता है। - SIGALRM, SIGVTALRM और SIGPROF
- सिग्नल अलार्म, सिग्नल वीटी अलार्म, सिग्नल प्रोफाइलिंग टाइमर अलार्म
- SIGALRM, SIGVTALRM और SIGPROF सिग्नल प्रक्रिया को भेजे जाते हैं जब कॉल में निर्दिष्ट समय सीमा पूर्ववर्ती 'अलार्म' सेटिंग फ़ंक्शन (जैसे
setitimer
) बीत जाता है। SIGALRM तब भेजा जाता है जब वास्तविक या घड़ी का समय समाप्त हो जाता है। SIGVTALRM तब भेजा जाता है जब प्रक्रिया द्वारा उपयोग किया जाने वाला CPU समय समाप्त हो जाता है। SIGPROF तब भेजा जाता है जब प्रक्रिया द्वारा उपयोग किया जाने वाला CPU समय और प्रक्रिया की ओर से सिस्टम द्वारा उपयोग किया जाता है, अर्थात जब प्रोफाइलिंग टाइमर समाप्त हो जाता है। - SIGBUS
- सिग्नल बस
- सिगबस सिग्नल प्रक्रिया को भेजा जाता है जब यह 'बस त्रुटि' का कारण बनता है। सिग्नल भेजे जाने की ओर ले जाने वाली स्थितियाँ हैं, उदाहरण के लिए, गलत मेमोरी एक्सेस अलाइनमेंट या गैर-मौजूद भौतिक पता।
- SIGCHLD
- सिग्नल चाइल्ड
- SIGCHLD सिग्नल प्रक्रिया को भेजा जाता है जब 'बाल प्रक्रिया' बाहर निकलता है (सिस्टम कॉल), बाधित होता है, या बाधित होने के बाद फिर से शुरू होता है। सिग्नल का सामान्य उपयोग ऑपरेटिंग सिस्टम को स्पष्ट कॉल के बिना इसकी समाप्ति के बाद चाइल्ड प्रोसेस द्वारा उपयोग किए जाने वाले संसाधनों को साफ करने का निर्देश देना है।
wait
सिस्टम कॉल। - SIGCONT
- सिगनल जारी
- SIGCONT सिग्नल ऑपरेटिंग सिस्टम को SIGSTOP या एसआईजीएसटीपी सिग्नल द्वारा पहले रोकी गई प्रक्रिया को 'जारी रखने' (पुनरारंभ) करने का निर्देश देता है। इस सिग्नल का महत्वपूर्ण उपयोग यूनिक्स खोल में नौकरी नियंत्रण (यूनिक्स) में है।
- SIGFPE
- सिग्नल फ़्लोटिंग-पॉइंट त्रुटि
- एसआईजीएफपीई सिग्नल प्रक्रिया को भेजा जाता है जब फ्लोटिंग पॉइंट या पूर्णांक अंकगणितीय हार्डवेयर में असाधारण (लेकिन जरूरी नहीं कि गलत) स्थिति का पता लगाया गया हो। इसमें शून्य से विभाजन, फ्लोटिंग पॉइंट अंडरफ़्लो या ओवरफ़्लो, पूर्णांक ओवरफ़्लो, अमान्य ऑपरेशन या अचूक संगणना शामिल हो सकती है। हार्डवेयर के आधार पर व्यवहार भिन्न हो सकता है।
- SIGHUP
- सिग्नल हैंगअप
- किसी प्रोसेस को SIGHUP सिग्नल तब भेजा जाता है जब उसका कंट्रोलिंग टर्मिनल बंद होता है। यह मूल रूप से RS-232 ड्रॉप ('हैंगअप') की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, इस सिग्नल का आमतौर पर मतलब होता है कि नियंत्रक टर्मिनल एमुलेटर बंद कर दिया गया है।[10] कई डेमॉन (सॉफ़्टवेयर) (जिनके पास कोई नियंत्रक टर्मिनल नहीं है) इस सिग्नल की प्राप्ति की व्याख्या उनकी कॉन्फ़िगरेशन फ़ाइलों को फिर से लोड करने और बाहर निकलने के बजाय उनके लॉगफ़ाइल्स को फ़्लश/पुनः खोलने के अनुरोध के रूप में करते हैं।[11] nohup कमांड है जो सिग्नल को अनदेखा करने के लिए कमांड बनाती है।
- SIGILL
- सिग्नल अवैध
- सिगिल सिग्नल प्रक्रिया को भेजा जाता है जब यह 'अवैध', विकृत, अज्ञात, या विशेषाधिकार प्राप्त निर्देश (कंप्यूटर विज्ञान) को निष्पादित करने का प्रयास करता है।
- SIGINT
- सिग्नल व्यवधान
- जब कोई उपयोगकर्ता प्रक्रिया को 'बाधित' करना चाहता है तो सिगिनट सिग्नल उसके नियंत्रण टर्मिनल द्वारा प्रक्रिया को भेजा जाता है। यह आमतौर पर Ctrl-C| दबाकर शुरू किया जाता हैCtrl+C, लेकिन कुछ सिस्टम पर, डिलीट कुंजी कैरेक्टर या ब्रेक कुंजी कुंजी का उपयोग किया जा सकता है।[12]
- SIGKILL
- सिग्नल मारो
- SIGKILL सिग्नल प्रक्रिया को भेजा जाता है जिससे वह तुरंत समाप्त हो जाए ('किल')। SIGTERM और सिगिनट के विपरीत, इस सिग्नल को पकड़ा या अनदेखा नहीं किया जा सकता है, और प्राप्त करने वाली प्रक्रिया इस सिग्नल को प्राप्त करने पर कोई सफाई नहीं कर सकती है। निम्नलिखित अपवाद लागू होते हैं:
- ज़ोंबी प्रक्रियाओं को नहीं मारा जा सकता है क्योंकि वे पहले से ही मर चुके हैं और उनकी मूल प्रक्रियाओं का इंतजार कर रहे हैं।
- जो प्रक्रियाएँ अवरुद्ध अवस्था में हैं, वे तब तक नहीं मरेंगी जब तक कि वे फिर से जाग न जाएँ।
- init प्रक्रिया विशेष है: इसे ऐसे सिग्नल नहीं मिलते हैं कि यह संभालना नहीं चाहता है, और इस प्रकार यह SIGKILL को अनदेखा कर सकता है।[13] इस नियम का अपवाद है जबकि Linux पर init ptraced है।[14][15]
- निर्बाध नींद प्रक्रिया SIGKILL भेजे जाने पर भी समाप्त (और इसके संसाधनों को मुक्त) नहीं कर सकती है। यह उन कुछ मामलों में से है जिसमें अस्थायी सॉफ़्टवेयर समस्या को हल करने के लिए UNIX सिस्टम को रीबूट करना पड़ सकता है।
- SIGKILL का उपयोग अंतिम उपाय के रूप में किया जाता है जब अधिकांश सिस्टम शटडाउन (कंप्यूटिंग) प्रक्रियाओं में प्रक्रियाओं को समाप्त करते हैं यदि यह स्वेच्छा से SIGTERM के जवाब में बाहर नहीं निकलता है। कंप्यूटर शटडाउन प्रक्रिया को गति देने के लिए, Mac OS X 10.6, उर्फ Mac OS X v10.6, SIGKILL को उन अनुप्रयोगों को भेजेगा, जिन्होंने स्वयं को साफ चिह्नित किया है, जिसके परिणामस्वरूप तेजी से शटडाउन समय, संभवतः, कोई बुरा प्रभाव नहीं है।[16] आदेश
killall -9
समान, जबकि खतरनाक प्रभाव होता है, जब निष्पादित किया जाता है उदा। लिनक्स में; यह प्रोग्राम को सहेजे न गए डेटा को सहेजने नहीं देता है। इसके पास अन्य विकल्प हैं, और कोई नहीं के साथ, सुरक्षित SIGTERM सिग्नल का उपयोग करता है। - SIGPIPE
- सिग्नल पाइप
- एसआईजीपीआईपीई सिग्नल प्रक्रिया को भेजा जाता है जब यह पाइपलाइन (यूनिक्स) को दूसरे छोर से जुड़ी प्रक्रिया के बिना लिखने का प्रयास करता है।
- SIGPOLL
- सिग्नल पोल
- स्पष्ट रूप से देखे गए फ़ाइल डिस्क्रिप्टर पर कोई घटना होने पर SIGPOLL सिग्नल भेजा जाता है।[17] इसका प्रभावी ढंग से उपयोग अतुल्यकालिक I/O अनुरोध करने की ओर जाता है क्योंकि कर्नेल कॉल करने वाले के स्थान पर डिस्क्रिप्टर को पोल करेगा। यह सक्रिय मतदान (कंप्यूटर विज्ञान) का विकल्प प्रदान करता है।
- SIGRTMIN को SIGRTMAX
- सिग्नल रीयल-टाइम न्यूनतम, सिग्नल रीयल-टाइम अधिकतम
- SIGRTMIN से SIGRTMAX सिग्नल का उपयोग उपयोगकर्ता-परिभाषित उद्देश्यों के लिए किया जाना है। वे 'वास्तविक समय' सिग्नल हैं।
- SIGQUIT
- सिगनल बंद
- SIGQUIT सिग्नल को उसके नियंत्रण टर्मिनल द्वारा प्रक्रिया में भेजा जाता है जब उपयोगकर्ता अनुरोध करता है कि प्रक्रिया 'छोड़' और कोर डंप करें।
- SIGSEGV
- सिग्नल विभाजन उल्लंघन
- एसआईजीएसईजीवी सिग्नल प्रक्रिया को भेजा जाता है जब यह अमान्य वर्चुअल मेमोरी संदर्भ, या विखंडन दोष करता है, यानी जब यह 'सेगमेंटेशन उल्लंघन' करता है।[18]
- SIGSTOP
- सिग्नल स्टॉप
- SIGSTOP सिग्नल ऑपरेटिंग सिस्टम को बाद में फिर से शुरू करने के लिए प्रक्रिया को 'स्टॉप' करने का निर्देश देता है।
- SIGSYS
- सिग्नल सिस्टम कॉल
- SIGSYS सिग्नल प्रक्रिया को भेजा जाता है जब यह सिस्टम कॉल के लिए खराब तर्क पास करता है। व्यवहार में, इस तरह का सिग्नल शायद ही कभी सामने आता है क्योंकि अनुप्रयोग उनके लिए कॉल करने के लिए पुस्तकालयों (जैसे सी मानक पुस्तकालय) पर भरोसा करते हैं। SIGSYS उन अनुप्रयोगों द्वारा प्राप्त किया जा सकता है जो उन्हें प्रतिबंधित करने के लिए कॉन्फ़िगर किए गए Linux Seccomp सुरक्षा नियमों का उल्लंघन करते हैं। SIGSYS का उपयोग विदेशी सिस्टम कॉल का अनुकरण करने के लिए भी किया जा सकता है, उदा। लिनक्स पर विंडोज सिस्टम कॉल का अनुकरण करें।[19]
- SIGTERM
- सिग्नल समाप्त
- SIGTERM सिग्नल को इसकी 'समाप्ति' का अनुरोध करने के लिए प्रक्रिया में भेजा जाता है। SIGKILL सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह प्रक्रिया को संसाधनों को जारी करने और उपयुक्त होने पर स्थिति को बचाने के लिए अच्छा समापन करने की अनुमति देता है। सिगिनट लगभग SIGTERM के समान है।
- SIGTSTP
- सिग्नल टर्मिनल स्टॉप
- एसआईजीएसटीपी सिग्नल को 'स्टॉप' ('t'erminal 'st'o'p') के लिए अनुरोध करने के लिए 'टर्मिनल' को नियंत्रित करने के लिए प्रक्रिया को भेजा जाता है। यह आमतौर पर उपयोगकर्ता द्वारा Ctrl-Z | दबाकर शुरू किया जाता हैCtrl+Z. SIGSTOP के विपरीत, प्रक्रिया सिग्नल हैंडलर को सिग्नल के लिए पंजीकृत कर सकती है या सिग्नल को अनदेखा कर सकती है।
- SIGTTIN और SIGTTOU
- SIGTTIN और SIGTTOU सिग्नल प्रक्रिया को तब भेजे जाते हैं जब वह पृष्ठभूमि प्रक्रिया के दौरान टेलेटाइपराइटर से क्रमशः पढ़ने या लिखने का प्रयास करती है। आमतौर पर, ये सिग्नल केवल जॉब कंट्रोल (यूनिक्स) के तहत प्रक्रियाओं द्वारा प्राप्त होते हैं; डेमन (कंप्यूटर सॉफ्टवेयर) में नियंत्रक टर्मिनल नहीं होते हैं और इसलिए, इन सिग्नलों को कभी प्राप्त नहीं करना चाहिए।
- SIGTRAP
- सिग्नल ट्रैप
- SIGTRAP सिग्नल प्रक्रिया को भेजा जाता है जब अपवाद (या 'ट्रैप') होता है: शर्त जिसके बारे में डिबगर ने सूचित करने का अनुरोध किया है – उदाहरण के लिए, जब विशेष उपनेमका निष्पादित किया जाता है, या जब विशेष चर (प्रोग्रामिंग) मान बदलता है।
- SIGURG
- तत्काल सिग्नल
- SIGURG सिग्नल प्रक्रिया को भेजा जाता है जब बर्कले सॉकेट में पढ़ने के लिए 'अत्यावश्यक' या आउट-ऑफ-बैंड डेटा उपलब्ध होता है।
- SIGUSR1 और SIGUSR2
- सिग्नल यूजर 1, सिग्नल यूजर 2
- SIGUSR1 और SIGUSR2 सिग्नल 'उपयोगकर्ता-परिभाषित स्थितियों' को इंगित करने के लिए प्रक्रिया में भेजे जाते हैं।
- SIGXCPU
- सिग्नल CPU से अधिक हो गया
- SIGXCPU सिग्नल प्रक्रिया को भेजा जाता है जब उसने 'CPU' का उपयोग उस अवधि के लिए किया है जो निश्चित पूर्व निर्धारित उपयोगकर्ता-सेटटेबल मान से 'अधिक' है।[20] SIGXCPU सिग्नल का आगमन प्राप्त करने की प्रक्रिया को किसी भी मध्यवर्ती परिणाम को जल्दी से बचाने और SIGKILL सिग्नल का उपयोग करके ऑपरेटिंग सिस्टम द्वारा समाप्त किए जाने से पहले इनायत से बाहर निकलने का मौका प्रदान करता है।
- 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 |
SIGKILL | 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 |
SIGSTOP | — | 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 |
SIGXCPU | — | Terminate (core dump) | CPU 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]
यह भी देखें
- सी सिग्नल हैंडलिंग
संदर्भ
- ↑ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
- ↑ Gagliardi, Pietro. "C Programming in Plan 9 from Bell Labs". doc.cat-v.org. Retrieved 22 January 2022.
- ↑ "Termination Signals". The GNU C Library).
- ↑ "Job Control Signals". The GNU C Library.
- ↑ "Miscellaneous Signals". The GNU C Library.
- ↑ "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: System Interfaces Chapter 2". pubs.opengroup.org. Retrieved 2020-12-20.
- ↑ "signal(7) - Linux manual page". man7.org. Retrieved 2020-12-20.
- ↑ "signal-safety(7) - Linux manual page". man7.org. Retrieved 2020-12-20.
- ↑ "The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition: <signal.h>". pubs.opengroup.org. Retrieved 2020-12-20.
- ↑ Michael Kerrisk (25 July 2009). "signal(7)". Linux Programmer's Manual (version 3.22). The Linux Kernel Archives. Retrieved 23 September 2009.
- ↑ "perlipc(1)". Perl Programmers Reference Guide, version 5.18. perldoc.perl.org - Official documentation for the Perl programming language. Retrieved 21 September 2013.
- ↑ "Proper handling of SIGINT and SIGQUIT". Retrieved 6 October 2012.
- ↑ https://manpages.ubuntu.com/manpages/zesty/man2/kill.2.html section NOTES
- ↑ "SIGKILL init process (PID 1)". Stack Overflow.
- ↑ "Can root kill init process?". Unix & Linux Stack Exchange.
- ↑ "Mac Dev Center: What's New in Mac OS X: Mac OS X v10.6". 2009-08-28. Retrieved 18 November 2017.
- ↑ "ioctl - controls a STREAM device". POSIX system call specification. The Open Group. Retrieved 19 June 2015.
- ↑ "What is a "segmentation violation"?". support.microfocus.com. Retrieved 2018-11-22.
- ↑ "Syscall User Dispatch – The Linux Kernel documentation". kernel.org. Retrieved 2021-02-11.
- ↑ "getrlimit, setrlimit - अधिकतम संसाधन खपत को नियंत्रित करें". POSIX system call specification. The Open Group. Retrieved 10 September 2009.
- ↑ 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
- ↑ "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.0 23.1 23.2 "signal(7) — Linux manual pages". manpages.courier-mta.org. Retrieved 2018-11-22.
- ↑ "Linux 3.0 x86_64: When is SIGSTKFLT raised?". Stack Overflow.
- Stevens, W. Richard (1992). Advanced Programming in the UNIX® Environment. Reading, Massachusetts: Addison Wesley. ISBN 0-201-56317-7.
- "The Open Group Base Specifications Issue 7, 2013 Edition". The Open Group. Retrieved 19 June 2015.
बाहरी संबंध
- Unix Signals Table, Ali Alanjawi, University of Pittsburgh
- Man7.org Signal Man Page
- Introduction To Unix Signals Programming Introduction To Unix Signals Programming at the Wayback Machine (archived 26 September 2013)
- Another Introduction to Unix Signals Programming (blog post, 2009)
- UNIX and Reliable पोसिक्स Signals by Baris Simsek
- Signal Handlers by Henning Brauer