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.
9
Réponses:
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 latimeout
commande beaucoup plus facile à sa placela source
start yourprogram.exe yourarguments
. Oui, il auraittaskkill
une option pour tuer par PID, mais vous devriez l'extraire dutasklist
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
à laping
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
la source
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()
outaskkill /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 ettaskkill /PID %PID%
tuer l'application démarrée.la source
Solution :
Dans Windows, il doit créer trois fichiers batch
process.bat
cm.bat
run.bat
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.
la source