J'ai plusieurs simulations à faire, chacune est invoquée avec python simulate.py <parameter list>
. Le problème avec ces simulations est que certaines d'entre elles se bloquent sans quitter, ce qui m'empêche de les exécuter en batch avec un simple script.
Ce dont j'ai besoin, c'est d'une forme de commande "run-time-constraint", qui tuerait automatiquement le processus (de préférence en appuyant virtuellement sur Ctrl + C , mais je pense que le simple kill fera aussi bien) après un temps spécifié, si le processus ne s'est pas terminé avec grâce par lui-même.
Bien sûr, je peux écrire un tel script moi-même, mais je soupçonne que quelqu'un l'a déjà fait avant moi, donc je n'ai pas à réinventer la roue en passant des heures avec ps
, time
et en bash des manuels.
la source
myProgram
termine en moins de temps quesleep
(pas une hypothèse déraisonnable puisque l'objectif est de définir un temps d' exécution maximal autorisé). Vous envoyez ensuite un signal soit à un PID inexistant (aucun dommage réel fait) ou à tout processus aléatoire sur le système (potentiellement fatal).timeout
commande fait exactement ce qu'il cherche, en attendant que l'OP réponde à mes commentaires.timeout
devrait être la solution dont j'ai besoin. Je le teste en ce momentJe l' ai trouvé quelque chose d' un peu mieux, que
timeout
:timelimit
.Il présente plusieurs avantages; la première est que l'utilisateur peut annuler manuellement l'exécution en appuyant sur "Ctrl + C".
Le
timelimit
programme est disponible dans le référentiel Debian.la source
Vous pouvez régler le temps CPU et d'autres choses avec
ulimit
, pour le temps CPU en particulier:la source
Bash utilise une variable appelée,
$BASHPID
elle peut être utilisée dans une telle situation, par exemple:Vous pouvez changer l'argument de l'appel en
sleep
endo_face()
au100
lieu de10
et voir ce qui se passe lorsque l'enfant prend trop de temps pour faire ses tâches. Modifiez simplement l'appel pour dormir endo_face()
appel à votre exécutable et si cela prend trop de temps, le script le tuera,20
secondes est la valeur limite dans cet exemple. Les paramètres peuvent être implémentés afin que cela devienne un simple script à appeler et puisse être appelé par un autre script en batch ou autre. La gestion des fichiers pid pour chaque processus simultané est un problème qui devra être traité, peut-être utiliser des sous-répertoires différents ...NB: Sur GNU Linux
sleep
peut prendre des arguments en virgule flottante tels quesleep 0.1
dormir pendant un dixième de seconde.la source