2013-02-13 8 views
8

सिग्नल हैंडलर पंजीकृत होने के बाद एक प्रक्रिया में 'फोर्क' कॉल है [SIGINT के लिए]। क्या होता है जब SIGINT कमांड लाइन के माध्यम से भेजा जाता है? क्या माता-पिता बाहर निकलते हैं या बच्चे या दोनों? लूप के दौरान माता-पिता और बच्चे दोनों अनंत चल रहे हैं।सिग्नल हैंडलर के लिए माता-पिता और बच्चे का व्यवहार

उत्तर

12

यदि आप fork (बिना exec* के बिना) सिग्नल हैंडलर पंजीकृत होने के बाद, उसी सिग्नल हैंडलर का उपयोग माता-पिता और बाल प्रक्रियाओं में किया जाएगा। यही है, अगर आप अपने SIGINT हैंडलर में exit के अलावा कुछ और करते हैं, तो न तो माता-पिता और न ही बच्चा बाहर निकल जाएगा (कैसे SIGINT भेजा गया था अप्रासंगिक है)।

तो तुम्हारा मतलब एक SIGINT (चरित्र vintr द्वारा जो आम तौर पर Ctrl+C है) टर्मिनल से भेजे गए: यह टर्मिनल को नियंत्रित करने के रूप में टर्मिनल का उपयोग कर प्रक्रियाओं के द्वारा प्राप्त हो जाएगा। यही है, जब तक आप बच्चे या माता-पिता को टर्मिनल को नियंत्रित करने से अलग नहीं करते हैं, तो दोनों SIGINT हैंडलर को कॉल करके Ctrl+C पर प्रतिक्रिया देंगे।

+0

लेकिन सिग्नल हैंडलर फोर्क() से पहले पंजीकृत है, इसलिए बच्चे को प्रतिलिपि नहीं होनी चाहिए। कांटा() के बाद बच्चे को कांटा() के बाद बयान निष्पादित करना चाहिए। सिग्नल हैंडलर पंजीकरण केवल माता-पिता में ही होगा। – Puneet

+4

@ पुनीट इट * * बच्चे द्वारा विरासत में मिला है, जो कुछ भी आपको लगता है कि यह * होना चाहिए। 'आदमी सिग्नेक्शन' देखें। इसके बारे में क्या अजीब बात है? 'फोर्क' विरासत से पहले खोले गए फाइल डिस्क्रिप्टर भी विरासत में हैं। सिग्नल के बारे में विशेष बात यह है कि गैर-डिफॉल्ट, गैर-अनदेखा * हैंडलर * 'execve' और दोस्तों पर रीसेट होते हैं (क्योंकि हैंडलर का पता किसी नए निष्पादन योग्य में कोई समझ नहीं आता है), लेकिन ऐसा कुछ भी 'फोर्क' पर नहीं होता है। –

+0

धन्यवाद श्रीमान ... संदेह साफ हो गया ... – Puneet