Ліміт часу командного рядка Windows


9

Як я можу йти про обмеження часу виконання програми командного рядка у Windows? Я знаю, що в Linux існує timeout / timelimit, але мені не вдалося знайти подібні утиліти для Windows.


Напевно, найкраще написати сценарій Powershell або Python для цього.
Прорив

Відповіді:


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

Якщо ви помістите це в блокнот і збережете його, оскільки .batвін створить пакетний файл, який це зробить.

Я використав 10 секунд як приклад, просто підкоригуйте ваші потреби.

Крім того, якщо ви використовуєте Vista або вище, ви можете перенести pingрядок і використовувати набагато простішу timeoutкоманду на своєму місці

timeout /t 10

1
Як би це обробляло аргументи та кілька примірників вашої програми? Було б добре , якщо старт буде повертати PID, але не тут ...

Ви можете передавати аргументи за допомогою start yourprogram.exe yourarguments. Так, це буде taskkillможливість вбити PID, але вам доведеться витягнути його tasklistспочатку на основі імені, яке повертається до квадратного, якщо у вас є кілька примірників. Це лише обмеження в cmd.
Bali C

1
+1 Використання ping як таймера тайм-ауту - забавна ідея :)
кол

Додайте > NULдо pingкоманди, щоб зменшити результат.
starbeamrainbowlabs

4

Як я знаю, здається, що такої функції не існує, але я думаю, що це доцільно, якщо ви змусите її запускати як завдання Windows через Планувальник завдань, звідти ви можете встановити обмеження виконання, налаштування під назвою: Зупиніть завдання, якщо воно запущене довше ніж:, ви можете отримати більш детальну інформацію тут: 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). Потім можна використовувати @ BaliC методи виведення тайм-ауту та taskkill /PID %PID%вбивати запущену програму.


1

Рішення:

У Windows йому потрібно зробити три пакетні файли

process.bat

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

см.бат

@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

Тепер запустіть process.bat. він запуститься як cm.bat, так і run.bat одночасно / паралельно. Коли a.exe від cm.bat закінчується; cm.bat вбиває run.bat, і, таким чином, він буде працювати як час очікування ubuntu.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.