Ich habe mehrere Simulationen zu erledigen, von denen jede aufgerufen wird python simulate.py <parameter list>
. Das Problem bei diesen Simulationen ist, dass einige von ihnen hängen bleiben, ohne sie zu beenden, was mich daran hindert, sie mit einem einfachen Skript im Batch auszuführen.
Was ich brauche, ist eine Art "Laufzeitbeschränkungs" -Befehl, der den Prozess nach einer bestimmten Zeit automatisch abbricht (vorzugsweise durch virtuelles Drücken von Strg + C , aber ich denke, einfaches Beenden reicht auch aus), wenn Der Prozess endete nicht von alleine.
Natürlich kann ich ein solches Skript selbst schreiben, aber ich vermute, dass jemand es bereits vor mir getan hat, sodass ich das Rad, mit dem ich Stunden verbringe ps
, nicht neu erfinden time
und Handbücher schlagen muss.
quelle
myProgram
Fertigstellung erfolgt in kürzerer Zeit alssleep
(keine unangemessene Annahme, da das Ziel darin besteht, eine maximal zulässige Laufzeit festzulegen). Sie senden dann ein Signal entweder an eine nicht vorhandene PID (kein wirklicher Schaden angerichtet) oder an einen zufälligen Prozess im System (möglicherweise tödlich).timeout
Befehl genau das tut, wonach er sucht, und darauf wartet, dass das OP auf meine Kommentare reagiert.timeout
sollte die Lösung sein, die ich brauche. IchIch habe etwas Besseres gefunden als
timeout
:timelimit
.Es hat mehrere Vorteile; Zum einen kann der Benutzer die Ausführung manuell abbrechen, indem er "Strg + C" drückt.
Das
timelimit
Programm ist im Debian-Repository verfügbar.quelle
Sie können die CPU-Zeit und andere Dinge
ulimit
einstellen, insbesondere für die CPU-Zeit:quelle
Bash verwendet eine Variable
$BASHPID
, die in einer solchen Situation verwendet werden kann, zum Beispiel:Sie können das Argument im Aufruf in
sleep
in änderndo_face()
,100
anstatt zu10
sehen, was passiert, wenn das Kind zu lange braucht, um seine Aufgaben zu erledigen. Ändern Sie einfach den Aufruf zum Einschlafen indo_face()
einen Aufruf Ihrer ausführbaren Datei. Wenn dies zu lange dauert, wird er vom Skript beendet.20
In diesem Beispiel ist Sekunden der Grenzwert. Parameter können so implementiert werden, dass dies ein einfaches Skript zum Aufrufen wird und von einem anderen Skript im Batch oder was auch immer aufgerufen werden kann. Die Behandlung der PID-Dateien für jeden gleichzeitigen Prozess ist ein Problem, das behandelt werden muss. Verwenden Sie möglicherweise andere Unterverzeichnisse ...NB: Unter GNU
sleep
kann Linux Gleitkomma-Argumente annehmen, um beispielsweisesleep 0.1
eine Zehntelsekunde lang zu schlafen.quelle