¿Cómo podría limitar el tiempo de ejecución de un programa de línea de comandos en Windows? Sé que en Linux hay tiempo de espera / límite de tiempo disponible, pero no he podido encontrar utilidades similares para Windows.
¿Cómo podría limitar el tiempo de ejecución de un programa de línea de comandos en Windows? Sé que en Linux hay tiempo de espera / límite de tiempo disponible, pero no he podido encontrar utilidades similares para Windows.
Respuestas:
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
Si coloca esto en el bloc de notas y lo guarda .bat
, creará un archivo por lotes que lo hará.
He usado 10 segundos como ejemplo, solo ajusta tus necesidades.
Además, si está utilizando Vista o superior, puede eliminar la ping
línea y usar el timeout
comando mucho más fácil en su lugar
timeout /t 10
start yourprogram.exe yourarguments
. Sí, tendría taskkill
una opción para matar por PID, pero tendrías que extraerlo desde el tasklist
principio según el nombre, que está de vuelta en el cuadrado uno si tienes varias instancias. Esto es solo una limitación de cmd.
> NUL
al ping
comando para aplastar su salida.
Como sé, parece que no existe tal función, pero creo que es factible si la ejecuta como una tarea de Windows a través del Programador de tareas, desde allí puede establecer una limitación de ejecución, la configuración denominada como: Detenga la tarea si se ejecuta más largo que: puede obtener más detalles aquí: http://technet.microsoft.com/en-us/library/cc722178.aspx
Si puede molestarse con el uso de PowerShell:
$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
iniciará el bloc de notas con un argumento de test.txt (puede separar varios argumentos por ,
.
Start-Sleep -Seconds 10
dormirá por 10s.
O matará $app.Kill()
o taskkill /PID $app.Id
eliminará la aplicación iniciada.
Si prefiere una solución cmd que solo llame a PowerShell para iniciar el proceso y luego almacene su PID en una variable:
for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A
(cuando se llama desde un .bat / .cmd, debe usarlo en %%A
lugar de %A
). Luego puede usar los métodos de @ BaliC para agotar el tiempo de espera y taskkill /PID %PID%
eliminar la aplicación iniciada.
Solución:
En Windows necesita hacer tres archivos por lotes.
proceso.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
Ahora ejecute process.bat. iniciará cm.bat y run.bat simultáneamente / paralelamente. Cuando a.exe de cm.bat termina; cm.bat mata run.bat y, por lo tanto, funcionará como tiempo de espera de ubuntu.