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.
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.
Respostas:
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 otimeout
comando muito mais fácil no lugar.fonte
start yourprogram.exe yourarguments
. Sim, teria,taskkill
uma opção para matar por PID, mas você teria que extraí-lo dotasklist
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
aoping
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
fonte
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()
outaskkill /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 etaskkill /PID %PID%
eliminar o aplicativo iniciado.fonte
Solução:
No Windows, ele precisa criar três arquivos em lote
process.bat
cm.bat
run.bat
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.
fonte