Как я могу ограничить время выполнения программы командной строки в Windows? Я знаю, что в Linux есть время ожидания / ограничения по времени, но я не смог найти аналогичные утилиты для Windows.
4 ответа
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
Если вы поместите это в блокнот и сохраните его как .bat
он создаст пакетный файл, который сделает это.
Я использовал 10 секунд в качестве примера, просто настроить ваши потребности.
Кроме того, если вы используете Vista или выше, вы можете удалить строку ping
и использовать гораздо более простую команду timeout
вместо нее.
timeout /t 10
Как я знаю, кажется, что такой функции не существует, но я думаю, что это выполнимо, если вы запускаете ее как задачу Windows через планировщик задач, и оттуда вы можете установить ограничение на выполнение, параметр называется: Остановить задачу, если она выполняется больше, чем:, вы можете получить более подробную информацию здесь: http://technet.microsoft.com/en-us/library/cc722178.aspx
Если вы можете быть обеспокоены с помощью PowerShell:$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
начнет блокнот с аргументом test.txt (можно выделить несколько аргументов ,
Start-Sleep -Seconds 10
будет спать 10 секунд .
Либо $app.Kill()
Если вы предпочитаете решение 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%
чтобы убить запущенное приложение.
Решение :
В 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.