Wie kann ich die Ausführungszeit eines Befehlszeilenprogramms in Windows begrenzen? Ich weiß, dass unter Linux Timeout / Timelimit verfügbar ist, aber ich konnte keine ähnlichen Dienstprogramme für Windows finden.
Wie kann ich die Ausführungszeit eines Befehlszeilenprogramms in Windows begrenzen? Ich weiß, dass unter Linux Timeout / Timelimit verfügbar ist, aber ich konnte keine ähnlichen Dienstprogramme für Windows finden.
Antworten:
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
Wenn Sie dies in den Editor einfügen und speichern, .bat
wird eine Batchdatei erstellt, die dies ausführt.
Ich habe 10 Sekunden als Beispiel verwendet, nur um Ihre Bedürfnisse zu optimieren.
Wenn Sie Vista oder höher verwenden, können Sie die ping
Zeile verschrotten und stattdessen den viel einfacheren timeout
Befehl verwenden
timeout /t 10
start yourprogram.exe yourarguments
. Ja, es würde taskkill
eine Option zum Töten durch PID geben, aber Sie müssten es tasklist
zuerst anhand des Namens extrahieren , der bei mehreren Instanzen wieder auf dem ersten Platz steht. Dies ist nur eine Einschränkung von cmd.
> NUL
den ping
Befehl hinzu, um die Ausgabe zu quetschen.
Wie ich weiß, scheint es keine solche Funktion zu geben, aber ich denke, es ist machbar, wenn Sie sie als Windows-Task über den Taskplaner ausführen. Von dort aus können Sie eine Ausführungsbeschränkung festlegen, die folgende Einstellung hat: Stoppen Sie die Task, wenn sie ausgeführt wird länger als: können Sie hier weitere Details abrufen : http://technet.microsoft.com/en-us/library/cc722178.aspx
Wenn Sie $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
Probleme mit der Verwendung von PowerShell haben:
Startet den Editor mit dem Argument test.txt (Sie können mehrere Argumente durch trennen ,
.
Start-Sleep -Seconds 10
wird für 10s schlafen.
Entweder $app.Kill()
oder taskkill /PID $app.Id
wird die gestartete Anwendung beenden.
Wenn Sie eine cmd-Lösung bevorzugen, die nur PowerShell aufruft, um den Prozess zu starten und dann die PID in einer Variablen zu speichern:
for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A
(Wenn Sie von einer .bat / .cmd aufgerufen werden, müssen Sie %%A
stattdessen verwenden %A
). Sie können dann die Methoden von @ BaliC verwenden taskkill /PID %PID%
, um das Zeitlimit zu überschreiten und die gestartete Anwendung zu beenden .
Lösung:
In Windows müssen drei Batch-Dateien erstellt werden
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
Führen Sie nun process.bat aus. Es startet sowohl cm.bat als auch run.bat gleichzeitig / parallel. Wenn a.exe von cm.bat endet; cm.bat beendet run.bat und funktioniert somit als Ubuntu-Timeout.