प्रतीक्षाइन्क्सिट ने पास किया है


कोड लगभग सभी की तरह दिखता है: जैसा कि आप देख सकते हैं, कोड एक सीएमडी। एक्ससी प्रक्रिया शुरू करता है और उस आदेश को कार्यान्वित करता है जिसे मैं निष्पादित करना चाहता हूं। मैं कोड से पढ़ने के लिए मानक ईर्रर और स्टैंडऑन आउटपुट को रीडायरेक्ट करता हूं। कोड प्रक्रिया से पहले उन्हें पढ़ता है WaitForExit (टाइमआउट) कॉल के रूप में Microsoft द्वारा अनुशंसित (और बाद में इस पर) समस्या तब उठती है जब मैं cmd. exe को भेजता हूं, कभी भी समाप्त नहीं होता है या अनिश्चित काल तक लटका रहता है। कोड में मैंने कमांड पिंग - t 8.8.8.8 का उपयोग किया था, जो - t ऑप्शन के कारण, बिना रोक के होस्ट को पिंग करता है। क्या होता है cmd. exe प्रक्रिया को ping - t कमांड के साथ कभी नहीं निकलता है और कभी भी stdout स्ट्रीम को बंद नहीं करता है और इसलिए हमारा कोड आउटपुट प्रक्रिया पर लटका हुआ है। StandardOutput. ReadToEnd () लाइन क्योंकि यह सभी स्ट्रीम को पढ़ने में सफल नहीं हो सकता। ऐसा भी होता है कि बैच फ़ाइल में किसी भी आदेश को किसी भी कारण से लटका दिया जाता है और इसलिए उपरोक्त कोड कई सालों तक लगातार काम कर सकता है और फिर बिना किसी स्पष्ट कारण के बिना अचानक लटका सकता है। इससे पहले कि मैंने लिखा था कि इसकी प्रक्रिया से पहले पुनः निर्देशित धाराओं को पढ़ने की सिफारिश की गई है। WaitForExit (टाइमआउट) कॉल, अच्छी तरह से यह विशेष रूप से सही है यदि आप टाइमआउट के बिना WaitForExit हस्ताक्षर का उपयोग करते हैं। यदि आप प्रक्रिया कॉल करते हैं रीडायरेक्ट स्ट्रीम पढ़ने से पहले WaitForExit (): कोड 2: यदि आप cmd. exe से जुड़ते हैं या आप जिस कॉल को कॉल करते हैं, तो मानक आउटपुट या मानक त्रुटि भरने पर आपको डेडलॉक का अनुभव हो सकता है यह इसलिए है क्योंकि हमारे कोड लाइनों तक पहुंच नहीं सकते हैं आउटपुट प्रक्रिया। मानक आउटपुट ReadToEnd () तथ्य की बात के रूप में बाल प्रक्रिया (पिंग कमांड या बैच फाइल या जो भी प्रक्रिया आप निष्पादित कर रहे हैं) खिचड़ी भाषा पर चलती है अगर हमारे प्रोग्राम में धाराओं के भरे बफ़र्स नहीं पढ़ा जाता है और ऐसा नहीं हो सकता क्योंकि कोड पर लटका हुआ है प्रक्रिया के साथ लाइन WaitForExit () जो बच्चे की परियोजना से बाहर निकलने के लिए हमेशा प्रतीक्षा करेंगे। दोनों धाराओं का डिफ़ॉल्ट आकार 4096 बाइट्स है। आप इन दो आकारों की इन बैच फ़ाइलों के साथ परीक्षण कर सकते हैं: पहला स्क्रिप्ट मानक आउटपुट के लिए 4096 बाइट्स लिखता है और मानक त्रुटि के लिए दूसरा है। इनमें से किसी एक को सी में सहेजें: testbuffsize. bat और हमारे प्रोग्राम कॉलिंग प्रक्रिया को चलाने के लिए। आउटपुट प्रक्रिया से पहले waitForExit () मानक आउटपुट कोड 2 में रीडटेन्ड () के रूप में आप इसे कमांड रिंगल्ट परिणाम ExecuteShellCommandSync (c: testbuffsize. bat, 1000) लिखकर कोड 13 की रेखा 13 पर लिख सकते हैं। कोड लटका नहीं है, लेकिन यदि आप दो धाराओं में से किसी एक में एक और बाइट लिखते हैं तो यह बफ़र आकार प्रोग्राम को बनाने में अतिप्रवाह करेगा लटका। यदि आपको मानक आउटपुट या स्टैंडर त्रुटि को रीडायरेक्ट करने और पढ़ने की आवश्यकता है तो सबसे अच्छा समाधान उन्हें एसिंक्रोनस तरीके से पढ़ना है। ऐसा करने का एक शानदार तरीका मार्क बॉयर्स द्वारा इस स्टैक ओवरफ्लो धागे में प्रस्तावित किया गया है पिछले बात के अनुसार कृपया ध्यान दें कि अगर बच्चा प्रक्रिया केवल इसलिए निकलती है क्योंकि आप इस प्रक्रिया का उपयोग करते हैं। WaitForExit (टाइमआउट) हस्ताक्षर और यह वास्तव में टाइमआउट में चला जाता है, आपको सीएमडी.एक्सए प्रक्रिया और उसके संभावित बच्चों को मारना चाहिए। मैं उस प्रक्रिया को देख रहा हूं। कभी-कभी संभवत: रिटर्न हालांकि प्रक्रिया अभी भी चल रही है। मेरा कोड नीचे testprogram. exe नाम के साथ एक प्रक्रिया शुरू करता है और फिर इसे बाहर निकलने के लिए प्रतीक्षा करता है। समस्या यह है कि कभी-कभी मुझे लगता है कि अपवाद को फेंक दिया जाता है, भले ही हेटेक्सित सही रिटर्न देता है, लेकिन सिस्टम में अभी भी जीवित है - यह कैसे मेरा प्रोग्राम लिख सकता है एक लॉग फ़ाइल में लिखने से पहले ही समाप्त हो जाता है और इस प्रकार मुझे बिल्कुल यह सुनिश्चित करने से पहले कि यह लॉग फ़ाइल मौजूद है (उर्फ प्रक्रिया को समाप्त कर दिया गया है)। लगातार अपने अस्तित्व की जांच एक विकल्प नहीं है। अद्यतन करें: मैं बस प्रक्रिया के इंतजार की प्रतीक्षा कर रहा था। वोटिंग लूप के बजाय वेटफॉरएक्स () और इसका नतीजा सटीक है। जोड़: उपरोक्त कोड केवल एक स्पष्ट समस्या को समान रूप से प्रदर्शित करने के लिए था। यह मेरी समस्या को स्पष्ट करने के लिए नहीं है कि मैं अभी भी प्रक्रिया द्वारा प्रक्रिया को पकड़ सकता है। GETProcessesByName (testprogram) के बाद यह सही करने के लिए HasExited सेट असली समस्या यह है कि जो प्रोग्राम मैं बाह्य रूप से चल रहा हूं वह एक फाइल लिखता है- पहले- यह समाप्त हो जाता है (ईमानदारी से)। मैं प्रक्रिया को समाप्त होने पर जांचने के लिए HasExited का उपयोग करता हूं और इस प्रकार मुझे पता है कि मैं फाइल को पढ़ सकता हूं (क्योंकि प्रक्रिया समाप्त हुई), लेकिन ऐसा लगता है कि हेटेक्सित रिटर्न भी कभी-कभी सही होता है जब प्रोग्राम ने अभी तक डिस्क पर फ़ाइल नहीं लिखी है Heres उदाहरण कोड जो सटीक समस्या को दिखाता है: 25 मार्च को 21:52 पर क्लिक किया जॉनर सोच रहा था कि अगर सब कुछ चलता है जैसे कि वे जाते हैं मुझे इस तरह की प्रक्रियाओं को प्रबंधित करने में परेशानी नहीं हुई थी शायद यह एक बाल प्रक्रिया शुरू करता है और किसी कारण से मुख्य, या पीआईडी ​​परिवर्तन से बाहर निकलता है, या डंपिंग अन्य प्रक्रिया में किया जाता है क्योंकि यह विंडोज़ त्रुटि रिपोर्टिंग में काम करता है या। केवल बहुत सारे चर हैं क्या प्रोसेस क्या करता है और जांचते हैं कि क्या प्रक्रिया अन्वेषक (प्रोसिक्स से सिसिनेंटल) में पीडल कृपया अधिक जानकारी प्राप्त करने के लिए आप प्रोमनॉन (सिसिनेटर्नल) का उपयोग कर सकते हैं ndash atlaste कृपया Jan 18 13 at 7:20 11 उत्तर मुझे पता है यह एक पुरानी पोस्ट है, लेकिन यह पता लगाने के लिए मेरा ऐप खोज रहा है कि क्यों ऐप ने हाल ही में खोला हुआ ऐप को चालू होने से पहले किसी ईवेंट को चलाया था, मुझे कुछ पता चला है, हालांकि मैं भविष्य में इस समस्या का अनुभव करने वाले लोगों के लिए उपयोगी हो सकता है। जब कोई प्रक्रिया शुरू हो जाती है, तो उसे पीआईडी ​​सौंपा जाता है। यदि प्रयोक्ता को उपयोगकर्ता खाता नियंत्रण संवाद के साथ संकेत मिलता है और हाँ का चयन करता है, तो प्रक्रिया को पुन: प्रारंभ किया जाता है और एक नया PID असाइन किया जाता है। मैं कुछ घंटों के लिए इस के साथ बैठ गया, उम्मीद है कि यह किसी समय बचा सकता है। उत्तर दिया Oct 22 14 13:11 मैं आपको इस तरह की कोशिश करने का सुझाव दूंगा: वैसे भी। HasExited Im के एमएसडीएन पृष्ठ में निम्नलिखित हल्की रोशनी नोट पढ़ना: जब मानक आउटपुट को एसिंक्रोनस इवेंट हैंडलर पर रीडायरेक्ट किया गया है, तो संभव है कि आउटपुट प्रसंस्करण पूरा नहीं होगा जब यह गुण सही होगा यह सुनिश्चित करने के लिए कि एसिंक्रोनस इवेंट हैंडलिंग पूरा हो गया है, WaitForExit () अधिभार को कॉल करें जो HasExited को जांचने से पहले कोई पैरामीटर नहीं लेता है। यह किसी भी तरह आपकी समस्या से जुड़ा हो सकता है क्योंकि आप सबकुछ रीडायरेक्ट कर रहे हैं। उत्तर 15 15 पर 15:52 उत्तर मुझे पता है, यह एक पुरानी पोस्ट है, लेकिन मैं किसी को मदद कर सकता है प्रोसेस कक्षा में कभी-कभी हेटेक्सित सच हो जाएगी यदि प्रक्रिया समाप्त हो गई है या अगर प्रक्रिया प्रशासक विशेषाधिकारों के साथ चलती है और आपके प्रोग्राम में केवल उपयोगकर्ता विशेषाधिकार हैं 4 जनवरी 15 जनवरी को उत्तर दिया गया है इसलिए समस्या की जड़ में एक और जांच के लिए आपको प्रक्रिया मॉनिटर का उपयोग करके वास्तव में क्या हो रहा है बस इसे शुरू करें और बाह्य कार्यक्रम और अपना स्वयं का उपकरण शामिल करें और इसे रिकॉर्ड करें कि क्या होता है। लॉग के भीतर आपको देखना चाहिए कि बाह्य उपकरण आउटपुट फाइल में कैसे लिखता है और आप उस फ़ाइल को कैसे खोलते हैं। लेकिन इस लॉग में आपको यह देखना चाहिए कि इन सभी अभिगमों के क्रम में क्या होता है। पहली बात यह है कि मेरे मन में आया था कि प्रक्रिया वर्ग झूठ नहीं बोलता है और प्रक्रिया वास्तव में चली गई जब वह ऐसा कहती है इसलिए समस्या ये है कि इस समय इस समय यह लगता है कि फ़ाइल अभी भी पूरी तरह से उपलब्ध नहीं है मुझे लगता है कि यह ओएस की समस्या है क्योंकि यह फ़ाइल के कुछ हिस्सों को अभी भी कैश के भीतर रखता है जो पूरी तरह से डिस्क पर नहीं लिखा जाता है और टूल ने अपनी फाइल हैंडल को बिना किसी फ़्लश करने के तुरंत बाहर निकाला है। इस बात को ध्यान में रखते हुए आपको लॉग में देखना चाहिए कि बाहरी उपकरण ने फाइल बनाई है, बाहर निकलती है और उसके बाद फाइल को फ्लेमडॉल्ड किया जाएगा (ओएस द्वारा जब आप लॉग में इस बिंदु को मिला देते हैं तो ओएस द्वारा कोई भी फिल्टर निकाल सकता है)। इसलिए यदि मेरी धारणाएं मूल कारण हैं तो आपके बाहरी उपकरण का बुरा व्यवहार होगा जो आप इस प्रकार बदल नहीं सकते हैं जिससे प्रक्रिया समाप्त हो जाने के बाद बस थोड़ी देर प्रतीक्षा करें और आशा करें कि समय समाप्त करने के लिए पर्याप्त समय फाइल को फ़्ल्डक्लोड हो ओएस (संभवतः एक लूप में फाइल को समय-समय तक खोलने का प्रयास करें जब तक कि यह सफल नहीं हो)। उत्तर 16 जनवरी को 12:36 उत्तर दिया है, क्या आप निश्चित हैं कि परीक्षा कार्यक्रम अपने आप की प्रक्रिया को उत्पन्न नहीं करता है और उस प्रक्रिया को समाप्त करने के लिए बिना प्रतीक्षा किए यहां दौड़ की किसी प्रकार से निपटना था, और परीक्षा कार्यक्रम महत्वपूर्ण हो सकता है। दूसरी बात आईडी बनाने की इच्छा इस बारे में है - मुझे यह सुनिश्चित करने की ज़रूरत है कि यह लॉगफ़ाइल मौजूद है। ठीक है, ऐसी कोई चीज नहीं है आप अपना चेक कर सकते हैं, और फिर फाइल समाप्त हो गई है इसका समाधान करने के लिए आम तरीका जांचना नहीं है, बल्कि फ़ाइल के साथ आप जो करना चाहते हैं वह करना है। आगे बढ़ो, इसे पढ़िए, अपवादों को पकड़ो, फिर से प्रयास करें यदि चीज़ अस्थिर लगती है और आप कुछ भी बदलना नहीं चाहते हैं यदि आपके पास एक से अधिक अभिनेता (धागा या जो भी) सिस्टम में है तो कार्यात्मक चेक-एंड अच्छी तरह से काम नहीं करता है यादृच्छिक विचारों का एक गुच्छा इस प्रकार है। क्या आपने FileSystemWatcher का उपयोग करने की कोशिश की है और प्रक्रिया को पूरा करने के आधार पर नहीं किया है यदि आप फ़ाइल को पढ़ने की कोशिश करते हैं तो यह बेहतर हो जाता है (इस बात की जांच नहीं है कि यह मौजूद है, लेकिन इसके बजाय कार्य करना) प्रक्रिया में.एक्टेटेड इवेंट में यह सिस्टम स्वस्थ नहीं है इवेंट में कुछ संदिग्ध लॉग कुछ सचमुच आक्रामक एंटीवायरस नीति को शामिल किया जा सकता है (सभी कोड को देखने और टेस्टप्रोग्राम में देखे बिना बहुत कुछ बताइए।) 17 जनवरी को 21:46 पर उत्तर दिया, प्रक्रिया के उपयोग के साथ कोई समस्या है। , यह तकनीकी रूप से संभव है क्योंकि इस प्रक्रिया को एक उपयोगी दृष्टि से बाहर निकल जाना पड़ता है लेकिन प्रक्रिया अभी भी थोड़ी देर के आसपास होती है, जबकि यह फ्लश डिस्क कैश जैसी सामान करता है। लॉग फ़ाइल विशेष रूप से बड़ी है (या डिस्क लिखने पर भारी प्रदर्शन कर रहा है कोई भी ऑपरेशन) ने जवाब दिया Mar 25 10 at 21:56 logfiles पूर्ण अधिकतम आकार 1MB के आसपास है मैं मतदान का उपयोग करने का कारण यह है कि मुझे किसी भी समय प्रतीक्षा कार्य को रद्द करने में सक्षम होना चाहिए और WaitForExit के साथ मैं कम से कम समय-समय तक अवरुद्ध हूं। आपकी राय में यह संभवतः संभव है कि यह प्रोग्राम डिस्क की अपनी धाराओं को फ्लश कर सकता है, भले ही हेसडेट रिटर्न सही हो, मुझे यह अजीब लगता है कि प्रोसेस लिस्ट में प्रक्रिया पूरी तरह से गड़बड़ नहीं है, जब हेसैक्टेड सच है। यह दस्तावेज के किसी भी विशेष परिस्थिति का उल्लेख नहीं करता है जहां तक ​​मैं बता सकता हूं। ndash johnrl 25 मार्च 10 बजे 22:03 यह कुछ मैंने पहले देखा है, लेकिन आकारों के लिए नहीं, जो छोटे जैसा कि एक और टिप्पणीकार द्वारा बताया गया है, हालांकि प्रक्रिया वर्ग प्रक्रिया के संदर्भ को बनाए रखेगा, आप बाहर निकलने की जांच के बाद प्रक्रिया के उदाहरण पर निपटाना चाहते हैं, लेकिन इससे पहले कि आप प्रक्रिया सूची में प्रयास करें और उसे ढूंढ लें। ndash tyranid Mar 26 10 at 3:35 मेरे पास केवल एक उदाहरण चल रहा है और I। मैंने विंडोज टास्क मैनेजर को खुले रखने की प्रक्रिया की कोशिश की और प्रक्रिया की सूची देखकर (आईडी की जाँच कर, वे मैच करते हैं), और वास्तव में जब मेरा कोड अपवाद फेंकता प्रक्रिया अभी भी सूची में है कभी-कभी यह लगभग तुरंत निकल जाता है जब अपवाद फेंका जाता है, अन्य बार इसे गायब होने के लिए एक या दो ले सकते हैं। मुझे यकीन नहीं है कि कार्य प्रबंधक पर भरोसा किया जा सकता है (हो सकता है कि देरी हो) लेकिन तथ्य यह है कि मेरा कोड अपवाद को फेंकता है - हर बार नहीं, लेकिन लगभग 110 वें रन के आसपास यह करता है ndash johnrl Mar 25 10 को 22:10 एक बार प्रक्रिया के बाद। HaseExited सच है, तो प्रक्रिया से बाहर हो गया है। यह मर चुका है यह कुछ समय के लिए एक ज़ोंबी हो सकता है, खासकर अगर प्रक्रिया ऑब्जेक्ट के लिए खुले हैंडल हो। तथ्य यह है कि GetProcessByName () कभी-कभी उस प्रक्रिया को वापस लौटा सकता है प्रक्रिया के अलावा कुछ भी नहीं है अभी भी एक ज़ोंबी है आपको प्रोसेस करना चाहिए। यह सुनिश्चित करने के लिए कि (1) हेडल जारी है लेकिन GetProcessByName का उपयोग करते हुए आपकी क्वाटेस्टक्वाट बस उचित नहीं है। प्रोसेस। हासएक्साइड ही एकमात्र भरोसेमंद टेस्ट है जो आप कर सकते हैं, और आप इसे पहले ही बना चुके हैं। ndash John Knoeller Mar 26 10 at 9:01 ध्वनि उचित लेकिन मुझे नहीं पता कि यह कैसे आया है कि 39testprogram39 फ़ाइल लिखती है (जो यह बंद होने से पहले ही होती है), डिस्क पर लिखा जाता है जब HasExited सच है यह कैसे हो सकता है अगर प्रक्रिया एक ज़ोंबी है (फिर इसे डिस्क पर सब कुछ फ़्लश किया जाना चाहिए, सही)। प्रोसेस ऑब्जेक्ट का निपटान प्रक्रिया तक चलने वाले कार्यक्रम पर कोई प्रभाव नहीं पड़ता, जहां तक ​​मुझे पता है कि यह कैसे मदद करेगा ndash johnrl Mar 26 10 at 13:05 यदि एक संभाल प्रक्रिया के लिए खुला है, तो ऑपरेटिंग सिस्टम प्रोसेस मेमोरी को रिलीज़ करता है इस प्रक्रिया से बाहर निकल चुका है, लेकिन प्रक्रिया के बारे में प्रशासनिक जानकारी रखती है, जैसे कि हैंडल, बाहर निकलने का कोड, और बाहर निकलने का समय शायद संबंधित नहीं है, लेकिन इसके लायक नोट करना अगर इसकी केवल एक समस्या 110 समय है, और किसी भी तरह के बाद भी प्रक्रिया गायब हो जाती है, HasExited के उपयोग के आधार पर, HasExited चेक कार्य के बाद एक और देरी जोड़ने की कोशिश करें, जैसे और यह देखें कि क्या समस्या बनी रहती है व्यक्तिगत तौर पर, Ive हमेशा किसी भी तरह की मतदान के बजाय, और एक सरलीकृत कस्टम आवरण का उपयोग किया जाता है। सिस्टम डायग्नोस्टिक्स। प्रक्रिया को थ्रेड सुरक्षा जैसी चीज़ें संभालने के लिए, CloseMainWindow () को कॉल करने के लिए प्रतीक्षा करें, इसके बाद WaitForExit (समयबाह्य) और अंत में मार ()। लॉगिंग, एट वगैरह, और कभी भी एक समस्या का सामना नहीं किया। उत्तर दिया Mar 25 10 at 22:34 शायद यह समस्या testprogram में है क्या यह कोड अच्छी तरह से फ्लशक्लोज़ इत्यादि। मुझे लगता है कि अगर testprogram डिस्क पर एक फ़ाइल लिखता है, तो फ़ाइल को कम से कम उपलब्ध होना चाहिए (रिक्त या नहीं) उत्तर दिया गया अप्रैल 29 10 8:27 पर यदि आपके पास वेब अनुप्रयोग है, और आपके बाहरी प्रोग्रामिंग फाइलें (डिस्क पर लिखने) की जांच कर रही है तो जांचें कि क्या आपके आईआईएस को उस फ़ोल्डर में लिखने का अधिकार है यदि गुण सुरक्षा में आपके IIS उपयोगकर्ता के लिए अनुमति जोड़ने की अनुमति नहीं है, तो इसका कारण मेरे मामले में, मैं प्रक्रिया प्राप्त कर रहा था। हैसियत सच है, लेकिन प्रक्रिया से फाइलें पूरी हो चुकी हैं, कुछ समय के लिए संघर्ष करने के बाद मैं उस फ़ोल्डर के लिए पूर्ण अनुमतियां जोड़ता हूं जहां प्रक्रिया रुक गया और प्रक्रिया थी। रीफ्रेश () के रूप में ज़राथस ऊपर और सब कुछ से वर्णित है अपेक्षित रूप में काम कर रहा था उत्तर दिया अप्रैल 18 14 पर 0:16 प्रोसेसनाम का उपयोग करें। रीफ़्रेश करें () जांचने से पहले कि क्या प्रक्रिया समाप्त हो गई है या नहीं ताज़ा करें () प्रक्रिया से संबंधित सभी कैश की गई जानकारी को साफ़ करेगी। उत्तर दिया 30 अप्रैल को 7:44 मुझे लगता है कि यह घटाया गया था - जैसा कि कोई भी अंतर्दृष्टि है, मैं ओपी के लिए इसी तरह की समस्या क्यों कर रहा हूं और सिर्फ इन सभी उत्तरों को सुलझाने का प्रयास कर रहा हूं। ndash केविन होल्ट नवंबर 22 16 18:28 आपका उत्तर 2017 स्टैक एक्सचेंज, इंक

Comments

Popular posts from this blog

सेमी विदेशी मुद्रा ट्रेडिंग पावर कोर्स

एमटी 4 हॉट फ़ॉरेक्स

विदेशी मुद्रा बॉयलर mq4