विंडोज कमांड लाइन समय सीमा


9

मैं विंडोज़ में कमांड लाइन प्रोग्राम के निष्पादन समय को सीमित करने के बारे में कैसे जा सकता हूं? मुझे पता है कि linux में timeout / timelimit उपलब्ध है, लेकिन मैं विंडोज़ के लिए समान उपयोगिताओं को खोजने में असमर्थ रहा हूं।


ऐसा करने के लिए शायद पॉवरशेल या पाइथन स्क्रिप्ट लिखना सबसे अच्छा है।
निर्णायक

जवाबों:


9
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe

यदि आप इसे नोटपैड में डालते हैं और इसे सहेजते हैं क्योंकि .batयह एक बैच फ़ाइल बनाएगा जो ऐसा करेगी।

मैंने एक उदाहरण के रूप में 10 सेकंड का उपयोग किया है, बस अपनी आवश्यकताओं के लिए ट्विक करें।

इसके अलावा, यदि आप विस्टा या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप pingलाइन को स्क्रैप कर सकते हैं और इसमें बहुत आसान timeoutकमांड का उपयोग कर सकते हैं

timeout /t 10

1
यह कैसे आपके तर्ज के तर्कों और कई उदाहरणों को हैंडल करेगा? यह अच्छा होगा यदि स्टार्ट एक पीआईडी ​​लौटाएगा, लेकिन ऐसा कोई भाग्य नहीं है ...

आप के साथ तर्क पारित कर सकते हैं start yourprogram.exe yourarguments। हाँ, यह taskkillपीआईडी ​​द्वारा मारने का एक विकल्प होगा, लेकिन आपको इसे tasklistपहले नाम के आधार पर निकालना होगा , जो कि यदि आपके पास एक से अधिक उदाहरण हैं, तो वर्ग एक पर वापस आ जाएगा। यह सिर्फ cmd की एक सीमा है।
बाली C

1
+1 टाइमिंग टाइमर के रूप में पिंग का उपयोग करना एक मज़ेदार विचार है :)
kol

संलग्न > NULकरने के लिए pingआदेश में यह उत्पादन छुटकारा पाने के लिए।
स्टारबिम्रेनबोलाब्स

4

जैसा कि मुझे पता है कि ऐसा कोई फ़ंक्शन मौजूद नहीं है, लेकिन मुझे लगता है कि यह उल्लेखनीय है यदि आप इसे टास्क शेड्यूलर के माध्यम से एक विंडोज़ कार्य के रूप में चलाते हैं, तो वहां से आप निष्पादन की सीमा निर्धारित कर सकते हैं, नाम दिया गया सेटिंग: यदि यह चलता है तो कार्य रोक दें इससे अधिक समय: आप यहाँ से और अधिक विवरण प्राप्त कर सकते हैं: http://technet.microsoft.com/en-us/library/cc722178.aspx


3

यदि आपको PowerShell का उपयोग करके परेशान किया जा सकता है: $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'test.txt के तर्क के साथ नोटपैड शुरू करेगा (आप कई तर्क अलग कर सकते हैं) ,

Start-Sleep -Seconds 10 10 के लिए सो जाएगा।

शुरू किए गए आवेदन को $app.Kill()या तो taskkill /PID $app.Idमार देंगे।

यदि आप एक cmd समाधान पसंद करते हैं जो प्रक्रिया शुरू करने के लिए केवल PowerShell को कॉल करेगा और फिर इसे PID को एक चर में संग्रहित करेगा: for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A(जब इसे -bat / .cmd से बुलाया जाता है तो आपको %%Aइसके बजाय उपयोग करना होगा %A)। इसके बाद आप @ बालीसी के तरीकों का उपयोग कर सकते हैं और taskkill /PID %PID%शुरू किए गए एप्लिकेशन को मार सकते हैं।


1

समाधान :

खिड़कियों में इसे तीन बैच फाइलें बनाने की आवश्यकता होती है

process.bat

@ECHO OFF
start   /b cm.bat
start  cmd.exe /c run.bat
EXIT

cm.bat

@ECHO OFF
a.exe < input.txt > out.txt
taskkill /im a.exe /f
taskkill /im cmd.exe /f
EXIT

run.bat

@ECHO off
timeout /t 5
taskkill /im a.exe /f 
taskkill /im cmd.exe /f

EXIT

अब Run process.bat। यह cm.bat और run.bat दोनों को एक साथ / समानांतर रूप से शुरू करेगा। जब cm .bat से a.exe समाप्त हो जाता है; cm.bat run.bat को मारता है और इस प्रकार यह ubuntu टाइमआउट के रूप में काम करेगा।

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