8

Как я могу ограничить время выполнения программы командной строки в Windows? Я знаю, что в Linux есть время ожидания / ограничения по времени, но я не смог найти аналогичные утилиты для Windows.

4 ответа4

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

Если вы поместите это в блокнот и сохраните его как .bat он создаст пакетный файл, который сделает это.

Я использовал 10 секунд в качестве примера, просто настроить ваши потребности.

Кроме того, если вы используете Vista или выше, вы можете удалить строку ping и использовать гораздо более простую команду timeout вместо нее.

timeout /t 10
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()

Если вы предпочитаете решение 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

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .