Limite de tempo da linha de comando do Windows


9

Como devo limitar o tempo de execução de um programa de linha de comando no Windows? Eu sei que no linux há timeout / timelimit disponível, mas não consegui encontrar utilitários semelhantes para o windows.


Provavelmente, é melhor escrever um script Powershell ou Python para fazer isso.
Breakthrough

Respostas:


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

Se você colocar isso no bloco de notas e salvá-lo, .batele criará um arquivo em lotes que fará isso.

Eu usei 10 segundos como exemplo, apenas ajuste suas necessidades.

Além disso, se você estiver usando o Vista ou superior, pode descartar a pinglinha e usar o timeoutcomando muito mais fácil no lugar.

timeout /t 10

11
Como isso lidaria com argumentos e várias instâncias do seu programa? Seria bom se o início retornaria um PID, mas não tive essa sorte ...

Você pode passar argumentos com start yourprogram.exe yourarguments. Sim, teria, taskkilluma opção para matar por PID, mas você teria que extraí-lo do tasklistprimeiro com base no nome, que está de volta ao ponto um, se você tiver várias instâncias. Esta é apenas uma limitação do cmd.
Bali C

11
+1 Usando de ping como o temporizador timout é uma ideia engraçada :)
kol

Anexe > NULao pingcomando para esmagar sua saída.
starbeamrainbowlabs

4

Como eu sei, parece que não existe essa função, mas acho que é possível se você executá-la como uma tarefa do Windows via Agendador de Tarefas; a partir daí, você pode definir uma limitação de execução, a configuração denominada: Interrompa a tarefa se ela for executada mais do que:, você pode obter mais detalhes aqui: http://technet.microsoft.com/en-us/library/cc722178.aspx


3

Se você se preocupa em usar o PowerShell: $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'iniciará o bloco de notas com um argumento de test.txt (você pode separar vários argumentos por ,.

Start-Sleep -Seconds 10 vai dormir por 10s.

Quer $app.Kill()ou taskkill /PID $app.Idvai matar o aplicativo foi iniciado.

Se você preferir uma solução cmd que apenas chamará o PowerShell para iniciar o processo e, em seguida, armazene seu PID em uma variável: for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A(quando chamada de .bat / .cmd, você deve usar em %%Avez de %A). Você pode usar os métodos de tempo limite do @ BaliC e taskkill /PID %PID%eliminar o aplicativo iniciado.


1

Solução:

No Windows, ele precisa criar três arquivos em lote

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

Agora execute process.bat. iniciará o cm.bat e o run.bat simultaneamente / paralelamente. Quando a.exe do cm.bat termina; O cm.bat mata o run.bat e, portanto, ele funciona como tempo limite do ubuntu.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.