Jak mogę ograniczyć czas wykonywania programu wiersza polecenia w systemie Windows? Wiem, że w systemie Linux dostępny jest limit czasu / limit czasu, ale nie byłem w stanie znaleźć podobnych narzędzi dla systemu Windows.
Jak mogę ograniczyć czas wykonywania programu wiersza polecenia w systemie Windows? Wiem, że w systemie Linux dostępny jest limit czasu / limit czasu, ale nie byłem w stanie znaleźć podobnych narzędzi dla systemu Windows.
Odpowiedzi:
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
Jeśli umieścisz to w notatniku i zapiszesz, ponieważ .bat
utworzy to plik wsadowy, który to zrobi.
Użyłem 10 sekund jako przykładu, po prostu dostosuj do swoich potrzeb.
Ponadto, jeśli używasz systemu Vista lub nowszego, możesz zeskrobać ping
linię i użyć o wiele łatwiejszego timeout
polecenia w jej miejscu
timeout /t 10
start yourprogram.exe yourarguments
. Tak, miałby taskkill
opcję zabicia przez PID, ale musiałbyś wyodrębnić go od tasklist
pierwszego na podstawie nazwy, która jest z powrotem na pierwszym miejscu, jeśli masz wiele instancji. To tylko ograniczenie cmd.
> NUL
do ping
polecenia, aby zgnieść jego wynik.
Jak wiem, wydaje się, że taka funkcja nie istnieje, ale myślę, że jest wykonalna, jeśli uruchomisz ją jako zadanie systemu Windows za pomocą Harmonogramu zadań, stamtąd możesz ustawić ograniczenie wykonywania, ustawienie o nazwie: Zatrzymaj zadanie, jeśli zostanie uruchomione dłużej niż: można uzyskać więcej szczegółów tutaj: http://technet.microsoft.com/en-us/library/cc722178.aspx
Jeśli możesz mieć problem z używaniem PowerShell:
$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
uruchomi notatnik z argumentem test.txt (możesz oddzielić wiele argumentów według ,
.
Start-Sleep -Seconds 10
będzie spał przez 10s.
Albo $app.Kill()
albo taskkill /PID $app.Id
zabije uruchomieniu aplikacji.
Jeśli wolisz rozwiązanie cmd, które wywoła PowerShell tylko w celu uruchomienia procesu, a następnie zapisuje swój PID w zmiennej:
for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A
(gdy wywoływany z .bat / .cmd musisz użyć %%A
zamiast %A
). Następnie możesz użyć metod przekroczenia limitu czasu @ BaliC i taskkill /PID %PID%
zabić uruchomioną aplikację.
Rozwiązanie :
W systemie Windows musi utworzyć trzy pliki wsadowe
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
Teraz uruchom proces.bat. uruchomi jednocześnie cm.bat i run.bat jednocześnie / równolegle. Gdy a.exe z cm.bat zakończy się; cm.bat zabija run.bat i dlatego będzie działać jako limit czasu Ubuntu.