tuer un prog s'il est trop long...

Le
Élodie
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 ?


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.

Elodie
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #17446371
"Élodie"
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
Alain Ketterlin
Le #17446471
"Élodie"
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 ?



http://www.pixelbeat.org/scripts/timeout

J'ai trouvé ce truc en cherchant des infos sur l'utilitaire timeout,
qui vient de faire son apparition dans les GNU coreutils.

-- Alain.
Élodie
Le #17452611
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"
"Élodie"
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
Le #17499101
In article Jean-Marc Bourguet
"Élodie"
> 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

--
Téléassistance / Télémaintenance
http://www.portparallele.com/ThomasDECONTES/
Publicité
Poster une réponse
Anonyme