How might I go about limiting the execution time of a command line program in windows? I know in linux there is timeout/timelimit available, but I have been unable to find similar utilities for windows.
start yourprogram.exe ping 127.0.0.1 -n 10 taskkill /im yourprogram.exe
If you put this in notepad and save it as
.bat it will create a batch file that will do this.
I have used 10 seconds as an example, just tweak to your needs.
Also, if you are using Vista or above you can scrap the
ping line and use the much easier
timeout command in it's place
timeout /t 10
As I know there seems no such a function exist, but I think it's doable if you make it run as a windows task via Task Scheduler, from there you can set a limitation of execution, the setting named as: Stop the task if it runs longer than:, you can get more detail from here: http://technet.microsoft.com/en-us/library/cc722178.aspx
If you can be bothered with using PowerShell:
$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt' will start notepad with an argument of test.txt (you can separate multiple arguments by
Start-Sleep -Seconds 10 will sleep for 10s.
taskkill /PID $app.Id will kill the started application.
If you prefer a cmd solution that will only call PowerShell to start the process and then store it's PID in a variable:
for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A (when called from a .bat/.cmd you have to use
%%A instead of
%A). You can then use @BaliC's methods of timing out and
taskkill /PID %PID% to kill the started application.
In windows it needs to make three batch files
@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
@ECHO off timeout /t 5 taskkill /im a.exe /f taskkill /im cmd.exe /f EXIT
Now Run process.bat . it will start both cm.bat and run.bat simultaneously/parallely. When a.exe from cm.bat terminates; cm.bat kills run.bat and thus it will work as ubuntu timeout.