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.
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.
Respostas:
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, .bat
ele 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 ping
linha e usar o timeout
comando muito mais fácil no lugar.
timeout /t 10
start yourprogram.exe yourarguments
. Sim, teria, taskkill
uma opção para matar por PID, mas você teria que extraí-lo do tasklist
primeiro 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.
> NUL
ao ping
comando para esmagar sua saída.
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
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.Id
vai 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 %%A
vez de %A
). Você pode usar os métodos de tempo limite do @ BaliC e taskkill /PID %PID%
eliminar o aplicativo iniciado.
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.