J'aurais une petite question de commandes UNIX à vous poser sachant que je
ne suis pas très compétente dans le domaine...
Je désire tuer un programme que je lance automatiquement si ce programme n'a
pas fini son exécution en 1 min... Comment peut-on faire cela ?
Plus de détails:
---------------
- Je dispose d'un programme toto.out qui fait des calculs selon les données
que l'on donne dans un fichier INPUT.txt. Les résultats de calculs sont
écrits dans un fichier OUTPUT.txt
- Je ne peux pas corriger ce programme mais je peux seulement l'exécuter.
- Il arrive que ce programme n'arrive pas à converger (une boucle infini) et
le seul moyen de l'arrêter est de faire un Ctrl+C (si au bout d'une minute,
le programme n'a pas fini son calcul, on peut considérer qu'il boucle à
l'infini et qu'il faut le stopper).
Je désire faire tourner ce programme pour une série de fichier d'entrée et
pour éviter d'avoir à le faire à la main, je comptais faire un petit script
Unix. (j'ai trouvé comment faire une petite boucle for sur chacun des
fichiers à simuler, ... et comment exécuter ce programme en le "ressourçant"
. scriptfilename)
---------------- scriptfilename ----------------
for file in FichierASimuler*; do
cp $file INPUT.txt;
toto.out;
mv OUTPUT.txt OUTPUT_$file;
done;
------------------------------------------------
ça conviendrait si le programme toto.out ne se retrouvait jamais dans le cas
d'une boucle infinie...
Il faut donc que je rajoute un test sur le temps d'exécution et si ça
dépasse une minute, alors il doit tuer le process...
mais comment faire cela?
for file in FichierASimuler*; do
cp $file INPUT.txt;
toto.out;
if temps>1 min < ---------------------- un
truc du style à définir...
kill toto
endif
mv OUTPUT.txt OUTPUT_$file;
done;
Merci à vous d'avoir déjà lu ce message jusqu'au bout
et merci à ceux qui connaissent un moyen de faire ce genre de chose et qui
m'en feront part.
merci à vous deux pour ces pistes, je vais regarder cela. C'est plus facile de chercher dans Google quand on connaît les mots clefs à chercher....
merci donc
"Jean-Marc Bourguet" a écrit dans le message de news:
"Élodie" writes:
Bonjour à tous,
J'aurais une petite question de commandes UNIX à vous poser sachant que je ne suis pas très compétente dans le domaine...
Je désire tuer un programme que je lance automatiquement si ce programme n'a pas fini son exécution en 1 min... Comment peut-on faire cela ?
Voir ulimit -t (pour sh) ou limit cputime (pour csh)
A+ -- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Thomas
In article , Jean-Marc Bourguet wrote:
"Élodie" writes:
> Bonjour à tous, > > J'aurais une petite question de commandes UNIX à vous poser sachant que je > ne suis pas très compétente dans le domaine... > > Je désire tuer un programme que je lance automatiquement si ce programme > n'a > pas fini son exécution en 1 min... Comment peut-on faire cela ?
Voir ulimit -t (pour sh)
merci bcp aussi, ça devrait me permettre de résoudre un de mes pbs :-))
pour me faciliter les choses,
- j'ai compris comment faire pour lancer un prgm qui aurais cette durée limite, est ce que c'est possible d'appliquer cette durée limite à un prgm qui est deja entrain de tourner, en indiquant son pid ?
- est ce que c'est possible de "sauter une génération" ? il s'agirait de lancer un prgm et que cette durée limite ne lui soit pas appliquée, mais qu'elle soit appliquée à tous ses enfants des qu'il fait un fork
- est ce que c'est possible de remettre à 0 le "compteur" tous les .... ? ça permettrais, précisément pour résoudre le pb que j'ai, de donner la possibilité au prgm de tourner à l'infini, tant qu'il ne consomme pas une grosse proportion du processeur, puisque le compteur serait remis à 0 systématiquement avant que le maximum soit dépassé et si on paramètre par exemple max 30 s raz toutes les minutes, le prgm serait coupé des qu'il consommerait plus de 50% du processeur pendant 1 minute
In article <pxbwsgkfxol.fsf@news.bourguet.org>,
Jean-Marc Bourguet <jm@bourguet.org> wrote:
"Élodie" <elodie.roux@ifrance.com> writes:
> Bonjour à tous,
>
> J'aurais une petite question de commandes UNIX à vous poser sachant que je
> ne suis pas très compétente dans le domaine...
>
> Je désire tuer un programme que je lance automatiquement si ce programme
> n'a
> pas fini son exécution en 1 min... Comment peut-on faire cela ?
Voir ulimit -t (pour sh)
merci bcp aussi, ça devrait me permettre de résoudre un de mes pbs :-))
pour me faciliter les choses,
- j'ai compris comment faire pour lancer un prgm qui aurais cette durée
limite,
est ce que c'est possible d'appliquer cette durée limite à un prgm qui
est deja entrain de tourner, en indiquant son pid ?
- est ce que c'est possible de "sauter une génération" ?
il s'agirait de lancer un prgm et que cette durée limite ne lui soit pas
appliquée, mais qu'elle soit appliquée à tous ses enfants des qu'il fait
un fork
- est ce que c'est possible de remettre à 0 le "compteur" tous les .... ?
ça permettrais, précisément pour résoudre le pb que j'ai, de donner la
possibilité au prgm de tourner à l'infini, tant qu'il ne consomme pas
une grosse proportion du processeur, puisque le compteur serait remis à
0 systématiquement avant que le maximum soit dépassé
et si on paramètre par exemple max 30 s raz toutes les minutes, le prgm
serait coupé des qu'il consommerait plus de 50% du processeur pendant 1
minute
> Bonjour à tous, > > J'aurais une petite question de commandes UNIX à vous poser sachant que je > ne suis pas très compétente dans le domaine... > > Je désire tuer un programme que je lance automatiquement si ce programme > n'a > pas fini son exécution en 1 min... Comment peut-on faire cela ?
Voir ulimit -t (pour sh)
merci bcp aussi, ça devrait me permettre de résoudre un de mes pbs :-))
pour me faciliter les choses,
- j'ai compris comment faire pour lancer un prgm qui aurais cette durée limite, est ce que c'est possible d'appliquer cette durée limite à un prgm qui est deja entrain de tourner, en indiquant son pid ?
- est ce que c'est possible de "sauter une génération" ? il s'agirait de lancer un prgm et que cette durée limite ne lui soit pas appliquée, mais qu'elle soit appliquée à tous ses enfants des qu'il fait un fork
- est ce que c'est possible de remettre à 0 le "compteur" tous les .... ? ça permettrais, précisément pour résoudre le pb que j'ai, de donner la possibilité au prgm de tourner à l'infini, tant qu'il ne consomme pas une grosse proportion du processeur, puisque le compteur serait remis à 0 systématiquement avant que le maximum soit dépassé et si on paramètre par exemple max 30 s raz toutes les minutes, le prgm serait coupé des qu'il consommerait plus de 50% du processeur pendant 1 minute