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ż .batutworzy 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ć pinglinię i użyć o wiele łatwiejszego timeoutpolecenia w jej miejscu
timeout /t 10
start yourprogram.exe yourarguments. Tak, miałby taskkillopcję zabicia przez PID, ale musiałbyś wyodrębnić go od tasklistpierwszego na podstawie nazwy, która jest z powrotem na pierwszym miejscu, jeśli masz wiele instancji. To tylko ograniczenie cmd.
> NULdo pingpolecenia, 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.Idzabije 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ć %%Azamiast %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.