यह कुछ कर्नेल हमारे लिए कर रहा है। आप कर्नेल स्रोतों में signal.c
फ़ाइल पढ़कर सभी जानकारी पा सकते हैं।
बिंदु है जहां गिरी एक पंजीकृत संकेत हैंडलर खोजने की कोशिश कर रहा है यहाँ शुरू होता है: http://lxr.free-electrons.com/source/kernel/signal.c#L2257
2257 ka = &sighand->action[signr-1];
2258
2259 /* Trace actually delivered signals. */
2260 trace_signal_deliver(signr, &ksig->info, ka);
2261
2262 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */
2263 continue;
2264 if (ka->sa.sa_handler != SIG_DFL) {
2265 /* Run the handler. */
2266 ksig->ka = *ka;
2267
2268 if (ka->sa.sa_flags & SA_ONESHOT)
2269 ka->sa.sa_handler = SIG_DFL;
2270
2271 break; /* will return non-zero "signr" value */
2272 }
तो, वहाँ एक संकेत हैंडलर अगर और अगर यह नहीं है "संकेत उपेक्षा" (SIG_IGN
) और अगर यह होता है "डिफ़ॉल्ट" हैंडलर (SIG_DEF
) नहीं, कर्नेल इसे चलाने के लिए बस चिह्नित करेगा (और यदि यह एक शॉट है तो यह हैंडलर को फिर से डिफ़ॉल्ट हैंडलर में ले जाएगा)।
हालांकि, कोई संकेत हैंडलर पंजीकृत है, या यदि अगर यह SIG_DEF
, गिरी जांच करता है कि शायद यह प्रक्रिया को रोकने के लिए, और अंत में राज्यों कर्नेल निम्नलिखित की जरूरत है:
2330 /*
2331 * Anything else is fatal, maybe with a core dump.
2332 */
http://lxr.free-electrons.com/source/kernel/signal.c#L2330
स्रोत
2015-09-17 08:52:08
अधिक प्रश्न - 'अगर' मैं अपना खुद का कस्टम हैंडलर प्रदान करता हूं? कस्टम हैंडलर में कोड कौन निष्पादित करेगा? लॉजिक को ओएस द्वारा रिंग 0 या रिंग 3 में प्रक्रिया में निष्पादित किया जाएगा? – bawejakunal
@ बावेजकुनाल: इसे अंगूठी में निष्पादित किया जाएगा 3. अन्यथा करना एक पूर्ण सुरक्षा जोखिम होगा। – 3442