Ограничение времени командной строки Windows

9

Как можно ограничить время выполнения программы командной строки в Windows? Я знаю, что в Linux есть время ожидания / ограничения по времени, но я не смог найти аналогичные утилиты для 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
Как бы это обрабатывало аргументы и множественные экземпляры вашей программы? Было бы неплохо, если бы start вернул PID, но не повезло ...
Вы можете передать аргументы с start yourprogram.exe yourarguments. Да, taskkillесть возможность убить по PID, но вам придется извлечь его из tasklistпервого на основе имени, которое возвращается на круги своя, если у вас есть несколько экземпляров. Это всего лишь ограничение cmd.
Бали С
1
+1 Использование пинга в качестве таймера тайм-аута - забавная идея :)
kol
Добавьте > 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%завершения запущенного приложения.

mprill
источник
1

Решение :

В windows нужно сделать три командных файла

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

Теперь запустите process.bat. он запустит и cm.bat, и run.bat одновременно / параллельно. Когда a.exe из cm.bat завершается; cm.bat убивает run.bat и, таким образом, он будет работать как тайм-аут Ubuntu.

Shawon
источник