विंडोज पर बैट प्रोसेस कैसे रोकें?


11

मेरे पास विंडोज पर बैकग्राउंड में चलने वाली BAT फाइल है जो लगभग दस मिनट तक चलती है। अब मैं इसे चालू रखते हुए रोकना चाहता हूं, लेकिन मैं कार्य प्रबंधक में प्रक्रिया-सूची में इसका नाम नहीं खोज सकता। तो मैं यह कैसे कर सकता हूं? धन्यवाद!

Update1

बैकग्राउड में चल रही बैट प्रक्रिया को रोकना मुश्किल लगता है। और मैं बीएटी फ़ाइल द्वारा शामिल हर प्रक्रिया को नाम से मारने की कोशिश करने का फैसला करता हूं, जिसे ओवरकेल्ड किया जा सकता है। यह मेरे लिए स्वीकार्य है क्योंकि मेरी बैट फाइल में अधिकांश प्रक्रियाओं का अक्सर उपयोग नहीं किया जाता है। जैसे कि पिंग, ट्रैसर्ट, नेटस्टैट आदि। यदि आपके पास कोई बेहतर उपाय है तो कृपया मुझे बताएं। धन्यवाद।

UPDATE2

बैट प्रक्रिया पेड़

वैकल्पिक शब्द


1
आपने बैकग्राउंड में बैट फाइल कैसे बनाई? आप कहते हैं कि आप ctrl-c नहीं कर सकते। मैं तोड़ने की कोशिश करता हूँ = अगर वह काम नहीं करता है, लेकिन आप कहते हैं कि आप ctrl-c नहीं कर सकते क्योंकि यह "पृष्ठभूमि में" है। हो सकता है कि यह पहले से ही भाग गया और समाप्त हो गया, और आपको बस उसे मारना होगा जो उसने पैदा किया था।
बार्लोप

2
@ बार्लॉप, इसे ShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);वीसी ++ में बैकग्राउड में एक्सटेंड किया जा सकता है ।
स्पॉन्स्ट

जवाबों:


11

प्रक्रियाएं आमतौर पर फैशन जैसे पेड़ में लॉन्च होती हैं, मैं Microsoft / Sysinternals Process Explorer को लॉन्च करने की सलाह दूंगा , Show Process Tree(1) विकल्प पर क्लिक करके शुरू करें , फिर अपनी प्रक्रिया खोजें और राइट क्लिक करें और चुनें Kill Process Tree(2) यह मूल फ़ाइल को मारना चाहिए और वह सब कुछ जो उसने लॉन्च किया है।

वैकल्पिक शब्द


प्रोसेस ट्री को मारना थोड़ा भारी हाथ लगता है। यह मूल प्रक्रिया (बैट कमांड) को मारने के लिए पर्याप्त हो सकता है।
वाग २६३

1
@ wag2639, सवाल पढ़ने के बाद, मैंने सोचा कि वह बैट और स्पॉन्ड प्रक्रियाओं को समाप्त करना चाहता है? जब यह कहा जाता है कि प्रक्रिया में इतना समय लगता है, तो मैं समझता हूं कि जब तक प्रक्रियाएं शुरू नहीं हो जाती हैं और तब तक कुछ भी नहीं होता है जब तक वे प्रतिक्रिया नहीं लिखते हैं ... यदि पेड़ समाप्त नहीं हुआ है, तो बस चलने वाली प्रक्रियाओं का एक गुच्छा होगा कुछ नहीं कर रहा।
विलियम हिल्सम

मैंने इस तरह से कोशिश की है और अपने जवाब में तस्वीर जोड़ दी है। धन्यवाद। और अब मुझे एक कमांड मिली है जो बैट फाइल और उसके बच्चों द्वारा शुरू की गई एक प्रक्रिया को मार सकती है taskkill /F /T /IM cmd.exe। केवल समस्या यह है कि प्रत्येक बैट फाइल cmd.exeडिफरेंट पीआईडी ​​के साथ एक प्रक्रिया शुरू करेगी। मुझे यह पता लगाने की जरूरत है कि कौन सा मेरा लक्ष्य है।
9

@SpawnST, BAT फाइल को क्या प्रक्रिया शुरू कर रहा है? आपको उस आइटम को मारने की आवश्यकता है जो इसे लॉन्च कर रहा है, अगर कई प्रतियां हैं।
विलियम हिल्सम

@ विल, यह एक MFC / डायलॉग प्रक्रिया द्वारा शुरू किया गया है। संवाद केवल विंडो शेल के साथ BAT फ़ाइल को चलाता है जब इसे आरंभीकृत किया जाता है। तो मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि संवाद से बाहर निकलने पर BAT प्रक्रिया पूरी तरह से अस्थायी है।
स्पॉनस्ट

5

आप बैच फ़ाइल को संशोधित कर सकते हैं ताकि यह फ़ाइल के अस्तित्व के लिए कमांड के बीच चेक सम्मिलित करके, ऑपरेटिंग को जारी रखने के लिए लॉक-फ़ाइल का उपयोग करे। बैच फ़ाइल को निष्पादित करने से रोकने के लिए, बस लॉक-फ़ाइल को हटा दें।

यहाँ एक डेमो बैच फ़ाइल है:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

उन प्रक्रियाओं को हिंसक रूप से मारने के लिए जो इस समय निष्पादित हो रही हैं, आप एक 'किल' बैच फ़ाइल बना सकते हैं जिसमें संभवतः बैच फ़ाइल से लॉन्च किए गए सभी कार्यों के लिए टास्ककिल कमांड होंगे :

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe

यह एक अच्छा विचार है। लेकिन मुझे लगता है कि यह मेरे ऐप के लिए कुछ समस्या पैदा कर सकता है जब एक कमांड लंबे समय तक निष्पादित करता है, tracertउदाहरण के लिए।
स्पॉनस्ट

हाँ, यह वही है जो मैं अब कर रहा हूं, वास्तव में एक हिंसक है :-) और शायद लॉक फ़ाइल इस समाधान में आवश्यक नहीं है।
स्पॉनस्ट

यह आवश्यक है इसलिए बैच फ़ाइल अगले कार्य को निष्पादित नहीं करती है जब उसका वर्तमान समाप्त हो जाता है। अन्यथा ऐसा हो सकता है कि टास्क 1 समाप्त हो गया है और टास्क 2 शुरू हो गया है क्योंकि इसके टास्ककिल पहले से ही किया गया था, इसलिए किल बैच बस टास्क 2 पर छूट जाएगा।
harrymc

1

एक बैट आमतौर पर केवल CMD.exe का एक उदाहरण लॉन्च करता है। आपकी स्क्रिप्ट क्या करती है, इसके आधार पर, यह अन्य प्रक्रियाओं को भी शुरू करेगा।


तो क्या कोई तरीका है जो इसे अन्य प्रक्रियाओं को शुरू करने से रोक सकता है?
स्पॉनस्ट

1
@SpawnST: यदि CMD विंडो दिखाई देती है, तो क्या आप सिर्फ CTRL + C टाइप नहीं कर सकते?
पैराडायरायड

@ jason404, जैसा कि मैंने प्रश्न में उल्लेख किया है, यह पृष्ठभूमि में चल रहा है।
स्पॉन्स्ट

1

मैंने एक ऐप लिखा है जो आपकी मदद कर सकता है, कम से कम अगर बैट सीएमडी विंडो में चल रहा हो। आप उन एप्लिकेशन विंडो को देख सकते हैं जो चल रही हैं और ऐप का PID प्राप्त कर सकते हैं, फिर आप इसे मेरे ऐप से मार सकते हैं, आप उन सभी प्रक्रियाओं को भी देख सकते हैं, जो इसे मार चुकी हैं और उन्हें भी मार सकती हैं। इसका एक वास्तविक सरल कार्यक्रम है, लेकिन इस तरह की चीज के लिए प्रभावी है। अगर आप पहले से ही नहीं जानते थे, तो आप इसका उपयोग ठीक उसी जगह पर करने के लिए कर सकते हैं, जहां आपकी HD BAT फाइल चल रही है।


मैं वीसी ++ / एमएफसी के साथ यह काम कर रहा हूं, और मुझे लगता है कि मुझे प्रतिक्रिया पाने के लिए कुछ विंडोज़ कमांड की आवश्यकता है।
स्पॉनस्ट

1

बैच फ़ाइल कैसे लागू की जाती है?
यदि यह टास्क शेड्यूलर से है, तो आप इसे वहां से भी रोक सकते हैं। यदि यह एक सेवा से है, तो आप सेवा को रोक सकते हैं।


1

यह संदेश बोर्ड धागा मिला:

http://www.gamedev.net/community/forums/topic.asp?topic_id=261694

यह ShellExecuteEx (या CreateProcess) का उपयोग करने का सुझाव देता है ताकि आप एक प्रक्रिया संभाल सकें, फिर इसका उपयोग प्रक्रिया को मारने के लिए किया जा सकता है।


0

यदि आपके पास यह कमांड प्रॉम्प्ट में खुला है तो आप Ctrl+ दबा सकते हैं C। कुछ सेकंड प्रतीक्षा करें और इसे समाप्त कर दिया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.