Limiter le temps d'execution d'une commande

Limiter le temps d'execution d'une commande - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 17-05-2006 à 16:06:00    

Bonjour,
 
J'ai actuellement un programme qui a tendance à partir en boucle infinis et à ne pas me rendre la main. J'ai donc un paliatif pour l'empecher de durer plus de 60 secondes :

commande& sleep 60; kill $!

Le problème c'est que si tous se passe bien et que le programme rend la main, je dois quand meme attendre 60 secondes. Y'a t'il un moyen pour ne pas attendre 60 secondes en cas de "succès" de l'application ?  :pt1cable:

Reply

Marsh Posté le 17-05-2006 à 16:06:00   

Reply

Marsh Posté le 17-05-2006 à 16:21:31    

il faut recuperer la variable renvoyée par le main() de ton application
pour savoir si celle ci est bien lancée ou non.
 
sinon, faire un px -x et faire un test sur le pid de ta commande
 
tu peux aussi créer un processus fils qui envoie un SIGN au pere
de rendre la main.

Reply

Marsh Posté le 17-05-2006 à 16:28:53    

Hum,  
je ne comprends pas tout, pour tout dire j'utilise cette commande sur mencoder. Parfois il m'arrive que mencoder se gauffre sur certain formats sur un serveur d'encodage, et il part en boucle infini (un bug de mencoder). Il mouline alors des heures et ne rend jamais la main. L'encodage se fait sur de tous petit fichiers et ne doit pas depasser les 20 secondes. Je cherche donc à tuer le process mencoder s'il depasse la minute comme temps d'execution. Avec ma commande ca marche, mais quand il fini sont travail au bout de 1 seconde et me rend la main, ça dure quand meme 60 secondes a cause du sleep. Je cherche donc à ne pas executer le "sleep 60; kill $!" lorsque mencoder rend bien la main.

Reply

Marsh Posté le 17-05-2006 à 17:12:22    

le pb de ton script c'est que ta commande est lancée en arriere plan "&".
 
pour le principe :
admettons que ton script1 (père) lance un script2 (fils)
dans ton script1 tu mets
script2
sleep 60
kill pid de ta commande/memencoder
 
dans ton script2 tu mets
commande&
 
ainsi tu as fait une cascade de script que tu peux faire communiquer
par un SIGN (regarde les doc de processus UNIX)
 
admettons que script2 soit terminé avant les 60sec, on peut intervenir
sur le kill de script1 (processus pere) avant que sleep 60 soit terminé.
 
sinon
si ton script2 n'est pas terminer avant script1, alors
script1 detruit aussi la totalité des processus (fils) lancé.
 
voila

Reply

Marsh Posté le 17-05-2006 à 18:16:02    

Merci beaucoup, ça m'a l'air d'etre le bon chemin.
Saurais tu me faire un exemple, je retourne ça dans tous les sens mais je n'arrive à rien....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed