Comment pourrais-je limiter le temps d'exécution d'un programme de ligne de commande dans Windows? Je sais que sous Linux, il y a timeout / timelimit disponible, mais je n'ai pas pu trouver des utilitaires similaires pour Windows.
Comment pourrais-je limiter le temps d'exécution d'un programme de ligne de commande dans Windows? Je sais que sous Linux, il y a timeout / timelimit disponible, mais je n'ai pas pu trouver des utilitaires similaires pour Windows.
Réponses:
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
Si vous mettez cela dans le bloc-notes et enregistrez-le car .bat
il créera un fichier de commandes qui le fera.
J'ai utilisé 10 secondes à titre d'exemple, ajustez simplement vos besoins.
De plus, si vous utilisez Vista ou supérieur, vous pouvez supprimer la ping
ligne et utiliser la timeout
commande beaucoup plus facile à sa place
timeout /t 10
start yourprogram.exe yourarguments
. Oui, il aurait taskkill
une option pour tuer par PID, mais vous devriez l'extraire du tasklist
premier en fonction du nom, qui est de retour à la case départ si vous avez plusieurs instances. Ce n'est qu'une limitation de cmd.
> NUL
à la ping
commande pour écraser sa sortie.
Comme je sais qu'il ne semble pas qu'une telle fonction existe, mais je pense que c'est faisable si vous la faites fonctionner comme une tâche Windows via le Planificateur de tâches, à partir de là, vous pouvez définir une limitation d'exécution, le paramètre nommé: Arrêtez la tâche si elle s'exécute plus long que:, vous pouvez obtenir plus de détails ici: http://technet.microsoft.com/en-us/library/cc722178.aspx
Si vous pouvez être dérangé par l'utilisation de PowerShell:
$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
démarrera le bloc-notes avec un argument test.txt (vous pouvez séparer plusieurs arguments par ,
.
Start-Sleep -Seconds 10
dormira pendant 10s.
Soit $app.Kill()
ou taskkill /PID $app.Id
tuera l'application démarrée.
Si vous préférez une solution cmd qui appellera uniquement PowerShell pour démarrer le processus, puis stockera son PID dans une variable:
for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A
(lorsqu'elle est appelée à partir d'un .bat / .cmd, vous devez utiliser à la %%A
place de %A
). Vous pouvez ensuite utiliser les méthodes de @ BaliC pour expirer et taskkill /PID %PID%
tuer l'application démarrée.
Solution :
Dans Windows, il doit créer trois fichiers batch
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
Maintenant, exécutez process.bat. il démarrera simultanément cm.bat et run.bat simultanément / parallèlement. Lorsque a.exe de cm.bat se termine; cm.bat tue run.bat et il fonctionnera donc comme un timeout ubuntu.