Sunday 31 December 2017

Daemonize c # प्रक्रिया waitforexit


मैं दृश्य सी 2005 (नेट फ्रेमवर्क 2) का उपयोग कर एक GUI अनुप्रयोग बना रहा हूं। मैं एक प्रक्रिया शुरू करने के लिए निम्न कोड का उपयोग करता हूं: मैं चाहता हूं कि मेरा आवेदन इस प्रक्रिया को समाप्त होने तक इंतजार करे, इसलिए मैंने WaitForExit का उपयोग किया। लेकिन जीयूआई विंडोज फ्रीज करता है जबकि ऐप. एक्सए चल रहा है। मैं इसे प्रत्युत्तर देना चाहता हूं (उदा। एक रद्द करें बटन दबाएं), लेकिन मैं कोड को जारी रखना नहीं चाहता, क्योंकि इसके बाद शुरू करने की कोई अन्य प्रक्रिया है अग्रिम धन्यवाद 09 नवंबर 9 9 को पूछा था 9:19 शायद आपको पृष्ठभूमिवर्कर के साथ एक समाधान को लागू करना चाहिए। यह कार्यान्वयन करना आसान है और आप क्या चाहते हैं। आपको क्या करना है, अपने फ़ॉर्म में एक पृष्ठभूमिवेर्कर का एक उदाहरण जोड़ना है, और BackgrondWorker RunWorkerAsync विधि से App. exe चलने वाली प्रक्रिया को कॉल करना है। फिर आप प्रक्रिया को समाप्त होने के बाद आवश्यक होने के लिए प्रक्रिया या रनवॉकर कॉम्पलेटेड इवेंट को रोकने के लिए रोशनमेंटिंग प्रॉपर्टी की निगरानी कर सकते हैं। वहाँ एक और इतना सवाल है पृष्ठभूमिवर्कर रद्दीकरण के विषय में इसका समाधान बहु-थ्रेडिंग शुरू करने का उपयोग कर जोड़ रहा है: फिर कोड को देखें: एक नया थ्रेड प्रारंभ होता है जो प्रक्रिया शुरू होती है, जब आप कॉल करें WaitForExit यह मुख्य थ्रेड को फ्रीज नहीं करता है यदि आप चलाना चाहते हैं कई प्रक्रिया वापस वापस करने के लिए यह एक और मामला है, आपको कोड की प्रक्रिया की एक सूची की तरह कुछ का उपयोग करने की आवश्यकता होगी, लेकिन मैं एक दूसरे को मैन्युअल रूप से जोड़ देता हूं लेकिन आप उदाहरण के लिए एक पाश का उपयोग कर सकते हैं, फिर भी आप उन्हें थ्रेड और दूसरी प्रक्रिया यूआई को ब्लॉक किए बिना पहली बार खत्म होने तक इंतजार करेंगे 17 जुलाई को 13: 07 एक उदाहरण कार्यक्रम के साथ सी भाषा में डेमॉन प्रक्रिया तैयार करना एक डेमन प्रोसेस एक प्रक्रिया है जो पृष्ठभूमि में चलता है और इसमें कोई टर्मिनल नहीं है। चूंकि एक डेमन प्रक्रिया में आमतौर पर कोई नियंत्रक टर्मिनल नहीं होता है इसलिए लगभग कोई भी उपयोगकर्ता इंटरैक्शन आवश्यक नहीं है। डेमन प्रक्रियाओं का उपयोग उन सेवाओं को प्रदान करने के लिए किया जाता है जो किसी भी उपयोगकर्ता इंटरैक्शन के बिना पृष्ठभूमि में अच्छी तरह से किया जा सकता है। उदाहरण के लिए एक प्रक्रिया जो पृष्ठभूमि में चलती है और नेटवर्क गतिविधि को देखती है और किसी भी संदिग्ध संचार को लॉग करता है जिसे डेमन प्रक्रिया के रूप में विकसित किया जा सकता है डेमन प्रोसेस डिज़ाइन एक डेमन प्रोसेस को किसी अन्य प्रक्रिया की तरह ही विकसित किया जा सकता है, लेकिन एक ऐसी चीज है जो इसे किसी भी अन्य सामान्य प्रक्रिया से अलग करती है अर्थात कोई नियंत्रक टर्मिनल नहीं। डेमन प्रोसेस को बनाने में यह एक प्रमुख डिज़ाइन पहलू है यह द्वारा प्राप्त किया जा सकता है: एक सामान्य प्रक्रिया बनाएं (माता-पिता की प्रक्रिया) उपरोक्त मूल प्रक्रिया से एक बच्ची प्रक्रिया बनाएं इस स्तर पर प्रक्रिया पदानुक्रम ऐसा दिखता है टर्मिनल - गेट पैरेंट प्रोसेस - जीटी बाल प्रक्रिया मूल प्रक्रिया को समाप्त करें बच्चे की प्रक्रिया अब अनाथ हो जाती है और इनट प्रक्रिया में इसे ले लिया जाता है। नए सत्र में प्रक्रिया चलाने के लिए call setsid () फ़ंक्शन को कॉल करें और एक नया समूह बनाएं उपरोक्त कदम के बाद हम यह कह सकते हैं कि अब यह प्रक्रिया नियंत्रक टर्मिनल के बिना एक डेमन प्रक्रिया बनती है। डेमॉन प्रक्रिया की कार्यशील निर्देशिका को रूट और stdin, stdout और stderr फ़ाइल डिस्क्रिप्टर्स बंद करने के लिए बदलें। डेमन प्रक्रिया चलाने का मुख्य तर्क दें। इसलिए हम देखते हैं कि उपरोक्त कदम एक डेमॉन बनाने के लिए बुनियादी डिजाइन चरणों को चिह्नित करता है। सी कांटा () फ़ंक्शन उपरोक्त दिए गए डिजाइन चरणों के बाद एक वास्तविक चल रहे डेमॉन बनाने से पहले, कांटा () सिस्टम कॉल के बारे में कुछ सीखने दें। कांटा () प्रणाली एक मूल प्रक्रिया बनाता है जो मूल प्रक्रिया की सटीक प्रतिलिपि है। इस नई प्रक्रिया को 8216child8217 प्रक्रिया के रूप में संदर्भित किया गया है। इस सिस्टम कॉल को एक बार (मूल प्रक्रिया में) कहा जाता है, लेकिन दो बार (माता-पिता में एक बार और दूसरी बार बच्चे में) रिटर्न मिलता है। नोट करें कि फोर्क () सिस्टम कॉल के बाद, चाहे माता-पिता पहले चलेंगे या बच्चा गैर-नियतात्मक है यह विशुद्ध रूप से संदर्भ स्विच तंत्र पर निर्भर करता है। यह कॉल बच्चे में शून्य देता है, जबकि मूल प्रक्रिया में बच्चे की प्रक्रिया का पीआईडी ​​रिटर्न देता है। इस कॉल के कुछ महत्वपूर्ण पहलू निम्न हैं: बच्चे की अपनी अनूठी प्रक्रिया आईडी है, और यह पीआईडी ​​किसी भी मौजूदा प्रोसेस ग्रुप की आईडी से मेल नहीं खाता है। बच्चे 8217 की मूल प्रक्रिया आईडी parent8217s प्रक्रिया आईडी के समान है बच्चा अपने माता पिता 8217 मे स्मृति तालों का वारिस नहीं करता है। प्रक्रिया संसाधन उपयोग और CPU समय काउंटर बच्चे में शून्य पर रीसेट कर रहे हैं। बच्चे 8217 के लंबित संकेतों का सेट शुरू में खाली है। बच्चे को अपने माता-पिता से सिकंदरा समायोजन का अधिकार नहीं मिलता है। बच्चा अपने माता-पिता से रिकॉर्ड तालों का मालिक नहीं है। बच्चा अपने माता-पिता से टाइमर का उत्तराधिकारी नहीं होता है बच्चे को अपने माता-पिता से बकाया अतुल्यकालिक आईओ प्रचालनों का उत्तराधिकारी नहीं होता है, और न ही इसके माता-पिता से किसी भी अतुल्यकालिक आईओ संदर्भ का वारिस नहीं करता है अधिक जानकारी के लिए, कृपया इस सिस्टम कॉल के मैन पेज को पढ़ें। पहले सेक्शन में उल्लिखित डिजाइन के आधार पर कार्यान्वयन। यह पूरा कार्यान्वयन है: निम्नलिखित तरीके से कोड संकलित और निष्पादित किया गया है: बस देखें कि नियंत्रण तुरंत टर्मिनल पर वापस आ गया है, अर्थात् डेमन अब किसी टर्मिनल से जुड़ा नहीं है। जब आप रूट निर्देशिका में स्थित log. txt फ़ाइल की जांच करते हैं, तो आप देख सकते हैं कि यह डेमन प्रक्रिया चल रही है।

No comments:

Post a Comment