कई समवर्ती पृष्ठभूमि प्रक्रियाओं को चलाने के बाद उन सभी को विंडोज पर समाप्त करने की प्रतीक्षा करें


14

किसी को भी पता है कि क्या cmd स्क्रिप्ट है जो कि और / या कमांड लाइन टूल काम के लिए तैयार है?


ऐसा करना आपके डेटा को नुकसान पहुंचा सकता है!
संतोष कुमार

8
@ संतोष: आपका क्या मतलब है "आपके डेटा को नुकसान पहुंचा सकता है"? मेरे विशिष्ट मामले में पृष्ठभूमि के कार्य अपने स्वयं के स्वतंत्र डेटा सेटों को संसाधित करेंगे। समवर्ती संशोधनों का कोई जोखिम नहीं।
सर्जियो

1
Win32 API की ओर से, मुझे लगता है कि WaitForMultipleObjects के साथ bWaitAll = TRUE काम करेगा। अगर कोई संतोषजनक जवाब नहीं मिलता है, तो ऐसे प्रोग्राम को लिखना मुश्किल नहीं होगा, जो किसी इनपुट फ़ाइल में दिए गए प्रोग्राम्स को छोड़ देता है।
user1686

1
@grawity: हाँ, मैं क्या कर रही पर योजना सिर्फ इतना है कि कुछ भी नहीं (कोड पोस्ट यहाँ और) है, लेकिन देखते हैं अगर मैं पहिया :) पुनर्रचना से बचने कर सकते हैं आता है
सर्जियो

पहिया को फिर से
चालू

जवाबों:


10

नीचे तीन बैच फाइलें बनाएं। Main.bat ने 1.bat और 2.bat को लॉन्च किया

1.bat और 2.bat अस्थायी फाइल को लिखते हैं जिसके लिए main.bat चेक करता है। जब 1.bat और 2.bat काम कर रहे हैं, main.bat रिपोर्ट करता है कि प्रसंस्करण अभी भी हो रहा है। जब आप हिट करते हैं तो 1.bat या 2.bat की ओपन विंडो में एंटर करें, अस्थायी फाइल डिलीट हो जाती है, और प्रोग्राम बाहर निकल जाता है। यह .bat फ़ाइल के लिए प्रसंस्करण रोक का अनुकरण करता है। यदि आप यह 1 और 2.bat दोनों के लिए करते हैं, तो main.bat आपको रिपोर्ट करता है कि इन प्रक्रियाओं के लिए प्रोसेसिंग पूरी हो गई है। आप 1.bat और 2.bat कुछ भी कर सकते हैं जो आप चाहते हैं, इसलिए जब तक आप समाप्त होने पर अस्थायी फ़ाइल को साफ़ नहीं करते हैं। इस बिंदु पर main.bat कुछ भी वह कर सकता है जो आप चाहते हैं कि वह भी करे।

1.bat

echo %time% > 1.tmp
pause
del 1.tmp
exit 

2.bat

echo %time% > 2.tmp
pause
del 2.tmp
exit

main.bat

@echo off
start "1" 1.bat
start "2" 2.bat
    @ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
    @ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!

ऐसा करने से पहले, मैं आपको बता सकता हूं कि यह दृष्टिकोण उतना कठिन नहीं है जितना लगता है। इसके अतिरिक्त, बनाए रखना आसान है - तर्क का विस्तार करना और जोड़ना, और किसी और को बनाए रखने के लिए प्रशिक्षित करना आसान है। आमतौर पर ये चीजें खुद की जान ले लेती हैं ...
RobW

मैं इस समाधान से खुश हूं।
user1068446

क्या आप @ कमांड पर विस्तार कर सकते हैं? मुझे समझ में नहीं आता है कि आप ऐसा क्यों करते हैं और 127.0.0.1 क्या है।
जो

6

पर्याप्त सरल, बशर्ते प्रक्रियाओं को मानक इनपुट या आउटपुट की आवश्यकता न हो। कमांड लाइन से, या एक बैच फ़ाइल में:

process1 | process2 | process3 | process4

यह सभी चार प्रक्रियाएँ एक साथ चलेंगी, और जब तक वे सभी बाहर नहीं निकलते, वापस नहीं आएंगे। (संभावित अपवाद: यदि कोई प्रक्रिया स्पष्ट रूप से मानक आउटपुट को बंद कर देती है तो उसे माना जा सकता है जैसे कि वह बाहर निकल गया था। लेकिन यह असामान्य है, बहुत कम प्रक्रियाएं ऐसा करती हैं।)

मुझे यकीन नहीं है कि आप इस तरह से एक साथ कितनी प्रक्रियाएं शुरू कर सकते हैं। मैंने दस तक कोशिश की है।


उह, मुझे जो मिलता है वह यह है कि सभी प्रक्रियाएं वास्तव में एक ही बार शुरू होती हैं, लेकिन प्रक्रिया 3 को प्रक्रिया 4 के पूरा होने तक इंतजार किया जाता है, प्रक्रिया 2 को प्रक्रिया 3 के पूरा होने तक इंतजार किया जाता है, और इसी तरह। यह क्लासिक विंडोज कमांड प्रॉम्प्ट से है।
सर्जियो

@ शेरगियो: "वेटिंग" का क्या मतलब है?
हैरी जॉन्सटन

1

ऐसा करने का एकमात्र तरीका अलग-अलग बैच फ़ाइलों को शुरू करना है (देखें start /?) जो व्यक्तिगत कार्य चलाते हैं और पूरा होने पर एक पाठ फ़ाइल लिखते हैं। फिर, आप समय-समय पर जांचते हैं कि क्या टेक्स्ट फाइलें बनाई गई हैं।


0

आप पॉवर्सशेल स्टार्ट-जॉब cmdlet को देख सकते हैं। यह आपको ऐसा करने की अनुमति देनी चाहिए। यहाँ अधिक पॉवर्सशेल माइक्रोसॉफ्ट के पसंद का खोल है। यह cmd स्क्रिप्ट की तुलना में बहुत अधिक शक्तिशाली है और आपके समय के निवेश को अच्छी तरह से खराब करता है


यह उन सभी को समाप्त करने के लिए इंतजार नहीं करता है?
तमारा विज्समैन

यह निश्चित रूप से इस पर निर्भर करता है कि आप इसे कैसे लिखते हैं। आप शुरू की गई नौकरियों को देख सकते हैं कि क्या वे पूरी हो चुकी हैं और एक बार वे आपकी स्क्रिप्ट से बाहर निकल सकते हैं। उस पृष्ठ का कोड एक बार में तीन नौकरियों की पूरी सूची की प्रक्रिया करता है और उनके बाहर निकलने का इंतजार करता है।
uSlackr

उह, पॉवर्सहेल के साथ पहले कभी कुछ नहीं किया। मैंने मनमानी प्रक्रियाओं को चलाने के लिए उदाहरण बदलने की कोशिश की और उन्हें पूरा करने के लिए इंतजार किया और लगभग 30 मिनट और एम $ टेक्नेट पर 100 लुकअप के बाद मैंने हार मान ली। मुझे खेद है कि अगर मैंने किसी की भावनाओं को आहत किया है, लेकिन पॉवरशेल बकवास है। सी में ऐसा करना आसान है (जो मुझे लगता है कि बता रहा है ...) वैसे भी धन्यवाद, मुझे यकीन है कि किसी को अभी भी यह उपयोगी मिलेगा।
सर्जियो

अगर वहाँ एक बात है Powershell बकवास नहीं है और यदि आप इसका उपयोग नहीं करते हैं तो आप मेरी भावनाओं को चोट नहीं पहुँचाएंगे। हालाँकि, आप इसे 30 मिनट की खोज में नहीं सीखेंगे।
uSlackr

1
PowerShell बकवास नहीं है, यह सिर्फ एक पूर्ण प्रोग्रामिंग भाषा है जिसे एक पारंपरिक श-लाइक सिंटैक्स के बजाय सीखना है। मुझे याद है कि पर्ल, पाइथन, टीएलसी, सी # के बारे में ठीक उसी तरह से महसूस कर रहा था, और हर दूसरी भाषा जिसे मैंने अभी तक बिना किसी वास्तविक उपयोग के "लुलज़ के लिए" सीखने की कोशिश की थी। (जब मुझे वास्तव में उनकी जरूरत थी, हालांकि, यह काफी आसानी से हो गया।)
user1686

0

या आप इसका उपयोग कर सकते हैं: http://www.out-web.net/?p=167

मैंने यह किया, यह काम करता है, हालांकि यह कभी-कभी होता है कि समाप्त प्रक्रिया के पीआईडी ​​को तुरंत एक और विंडोज प्रोसेसस द्वारा फिर से उपयोग किया जाता है जो अभी शुरू हुआ था, और यह आपके प्रोसस के अंत का पता लगाता है खतरनाक / गलत।


2
कृपया संक्षेप में बताएं कि लिंक क्या कहता है। यदि पृष्ठ नीचे जाता है, तो यह उत्तर उपयोगी नहीं होगा।
केविन पेंको

बहुत देर लगती है।
रॉबर्ट

0

मैं भी ऐसे ही काम की तलाश में था। उद्देश्य कई कमांड समानांतर चलाने और सभी समानांतर प्रक्रियाओं के आउटपुट (स्टडआउट और त्रुटि) निकालने का था। फिर किसी अन्य कमांड को पूरा करने और निष्पादित करने के लिए सभी समानांतर प्रक्रियाओं की प्रतीक्षा करें। BAT फ़ाइल के लिए एक नमूना कोड निम्नलिखित है, जिसे CMD में निष्पादित किया जा सकता है:

( start "" /B cmd /c ping localhost -n 6 ^>nul timeout /t 5 /nobreak start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1 start "" /B cmd /c ping localhost -n 11 ^>nul timeout /t 10 /nobreak ) | pause Echo waited timeout /t 12 /nobreak

अंदर के सभी कथनों को ()पहले निष्पादित किया जाता है, उनके पूरा होने की प्रतीक्षा करें, फिर अंतिम दो पंक्तियों को निष्पादित किया जाता है। के साथ भीख माँगने वाले सभी आदेशों को startएक साथ निष्पादित किया जाता है।

ये लिंक सहायक हैं: /programming//a/43762349/9689416 और https://ss64.com/nt/stav.html

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