Mam kilka symulacji do wykonania, z których każda jest wywoływana python simulate.py <parameter list>
. Problem z tymi symulacjami polega na tym, że niektóre z nich zawieszają się bez wychodzenia, co uniemożliwia mi uruchamianie ich wsadowo za pomocą prostego skryptu.
Potrzebowałbym jakiejś formy polecenia „ograniczenia w czasie wykonywania”, które automatycznie zabiłoby proces (najlepiej przez naciśnięcie Ctrl + C , ale myślę, że proste zabicie też zrobi) po określonym czasie, jeśli sam proces nie zakończył się z gracją.
Oczywiście mogę sam napisać taki skrypt, ale podejrzewam, że ktoś zrobił to już przede mną, więc nie muszę wymyślać koła, które spędzam godzinami ps
, time
i bash podręczników.
źródło
myProgram
kończy się w krótszym czasie niżsleep
(nie jest to nieuzasadnione założenie, ponieważ celem jest ustawienie maksymalnego dozwolonego czasu wykonywania). Następnie wysyłasz sygnał do nieistniejącego PID (bez wyrządzenia rzeczywistej szkody) lub do dowolnego losowego procesu w systemie (potencjalnie śmiertelny).timeout
polecenie robi dokładnie to, czego szuka, czekając, aż OP odpowie na moje komentarze.timeout
powinno być rozwiązaniem, którego potrzebuję. ObecnieZnalazłem coś trochę lepiej, niż
timeout
:timelimit
.Ma kilka zalet; jednym z nich jest to, że użytkownik może ręcznie przerwać wykonywanie, naciskając „Ctrl + C”.
timelimit
Program dostępny jest w repozytorium Debiana.źródło
Możesz dostroić czas procesora i inne rzeczy
ulimit
, szczególnie czas procesora:źródło
Bash używa zmiennej o nazwie
$BASHPID
to może być użyte w takiej sytuacji, na przykład:Można zmienić argument w wywołaniu
sleep
wdo_face()
celu100
zamiast10
i zobaczyć, co się dzieje, gdy dziecko trwa zbyt długo, aby wykonać swoje obowiązki. Wystarczy zmienić wywołanie uśpieniado_face()
na wywołanie pliku wykonywalnego, a jeśli zajmie to zbyt dużo czasu, skrypt go zabije,20
w tym przykładzie wartość graniczna to sekundy. Parametry mogą być zaimplementowane, aby stał się prostym skryptem do wywołania i może być wywołany przez inny skrypt wsadowo lub cokolwiek innego. Obsługa plików pid dla każdego współbieżnego procesu to problem, który należy rozwiązać, być może użyj innych podkatalogów ...NB: W systemie GNU Linux
sleep
może przyjmować argumenty zmiennoprzecinkowe, takie jaksleep 0.1
spanie przez dziesiątą część sekundy.źródło