¿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.
9
¿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:
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 eltimeout
comando mucho más fácil en su lugarfuente
start yourprogram.exe yourarguments
. Sí, tendríataskkill
una opción para matar por PID, pero tendrías que extraerlo desde eltasklist
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
alping
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
fuente
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()
otaskkill /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 ytaskkill /PID %PID%
eliminar la aplicación iniciada.fuente
Solución:
En Windows necesita hacer tres archivos por lotes.
proceso.bat
cm.bat
run.bat
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.
fuente