मेरे पास एक एप्लिकेशन ए है कि मैं कॉन्फ़िगरेशन फ़ाइल में किसी उपयोगकर्ता द्वारा निर्दिष्ट मनमाने ढंग से अन्य प्रक्रियाओं को आमंत्रित करने में सक्षम होना चाहता हूं।विंडोज़ पर मनमाने ढंग से उपप्रोकैस चलाएं और अभी भी साफ-सफाई समाप्त करें?
बैच स्क्रिप्ट बी ऐसी एक प्रक्रिया है जिसे उपयोगकर्ता ए बी द्वारा बुलाया जाना चाहते हैं, कुछ पर्यावरण चर सेट करता है, कुछ संदेश दिखाता है और कुछ काम करने के लिए एक कंपाइलर सी को आमंत्रित करता है।
क्या विंडोज़ मनमाने ढंग से प्रक्रियाओं को साफ तरीके से समाप्त करने का एक मानक तरीका प्रदान करता है? मान लें कि ए कंसोल में चलाया जाता है और CTRL + C प्राप्त करता है। क्या यह बी और सी को पास कर सकता है? मान लीजिए कि एक खिड़की में एक रन और उपयोगकर्ता विंडो बंद करने का प्रयास करता है, क्या यह बी और सी को रद्द कर सकता है?
टर्मिनेट प्रोसेस एक विकल्प है, लेकिन बहुत अच्छा नहीं है। यदि ए बी पर टर्मिनेट प्रोसेस का उपयोग करता है, सी चल रहा रहता है। यदि सी लंबे समय से चल रहा है, तो यह खराब समस्याएं पैदा कर सकता है, क्योंकि हम उसी फाइल पर काम करने के लिए सी का एक और उदाहरण शुरू कर सकते हैं जबकि सी का पहला उदाहरण अभी भी काम पर गुप्त रूप से है। इसके अलावा, TerminateProcess के परिणामस्वरूप एक साफ निकास नहीं होता है।
GenerateConsoleCtrlEvent अच्छा लगता है, और जब भी सबकुछ कंसोल में चल रहा है, तो काम कर सकता है, लेकिन प्रलेखन कहता है कि आप केवल अपने कंसोल पर CTRL + C भेज सकते हैं, और अगर कोई विंडो में चल रहा है तो इससे मदद नहीं मिलेगी।
क्या विंडोज़ पर सिगिनट के बराबर कोई समतुल्य है? मुझे इस तरह का एक लेख ढूंढना अच्छा लगेगा: http://www.cons.org/cracauer/sigint.html विंडोज के लिए।
+1 अच्छे प्रश्न के लिए। मजेदार वहाँ कोई जवाब नहीं दिया गया है ... मैं Win32 में सिग्नल की तरह तंत्र के बारे में पता नहीं हूँ। जब मुझे बाल प्रक्रियाओं को सूचित करने की आवश्यकता होती है तो मैंने GUI ऐप्स पर एक WM_CLOSE संदेश पोस्ट किया। कंसोल अनुप्रयोगों के लिए मैंने मुख्य एप्लिकेशन में इनपुट और आउटपुट स्ट्रीम को जोड़कर उन्हें बनाया और जब मैं उन्हें समाप्त करना चाहता था तो मैंने इनपुट स्ट्रीम को बंद कर दिया। बच्चों के बच्चों के लिए, मैंने अपने प्रत्यक्ष बच्चों पर निर्भरता को साफ करने के लिए भरोसा किया :)। –