Limit czasu wiersza poleceń systemu Windows

9

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.

ayu
źródło
Prawdopodobnie najlepiej jest do tego napisać skrypt PowerShell lub Python.
Przełom

Odpowiedzi:

9
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
Bali C.
źródło
1
Jak poradziłoby to sobie z argumentami i wieloma wystąpieniami twojego programu? Byłoby miło, gdyby start zwrócił PID, ale nie ma takiego szczęścia ...
Możesz przekazać argumenty za pomocą 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.
Bali C
1
+1 Użycie ping jako timera jest zabawnym pomysłem :)
kol
Dołącz > NULdo pingpolecenia, aby zgnieść jego wynik.
starbeamrainbowlabs
4

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

Simon Wang
źródło
3

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ę.

mprill
źródło
1

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.

Shawon
źródło