9

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.

1
  • It's probably best to write a Powershell or Python script to do this. – Breakthrough Dec 17 '12 at 17:22
9
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
4
  • 1
    How would this handle arguments and multiple instances of yourprogram? It would be nice if start would return a PID, but no such luck... – ayu Dec 17 '12 at 16:15
  • You can pass arguments with start yourprogram.exe yourarguments. Yeah it would, taskkill has an option to kill by PID but you would have to extract it from tasklist first based on name, which is back at square one if you have multiple instances. This is just a limitation of cmd. – Bali C Dec 17 '12 at 16:18
  • 1
    +1 Using ping as the timout timer is a funny idea :) – kol Dec 17 '12 at 18:28
  • Append > NUL to the ping command to squash it's output. – starbeamrainbowlabs Oct 24 '19 at 18:18
4

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

3

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.

Either $app.Kill() or 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.

2

Solution :

In windows it needs to make three batch files

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

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.

1
  • The best answer. However it would be even better to use custom window title: start "a.exe killer" cmd.exe /c run.bat together with taskkill /fi "WindowTitle eq a.exe killer" /f and so on – Smylic Feb 21 at 19:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.