Ordre traitement des processus script shell

Résolu/Fermé
teab - 31 mai 2010 à 15:39
 teab - 1 juin 2010 à 13:37
Bonjour,

J'ai un script shell qui lance un noyau de calcul exterieur au script.
Allure du script

commande 0

/noyaudecalcul

commande 1

Ma question est la suivante: pour executer la commande 1, le script attend-il vraiment que l'éxecution du noyau de calcul soit terminée?

Une seconde question :
Comment puis-je stopper prematurement l'execution du noyau de calcul (si celle-ci depasse 10 secondes par exemple).

Merci d'avance à tous!
teab

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
31 mai 2010 à 15:47
Salut,

Question 1 : Oui

Question 2 : Tu lances la commande précédente en arrière-plan (commande &) et tu intercales un "sleep 10", puis tu vérifies que le job de la commande en arrière-plan ($!) n'est plus présent...
0
question 1: merci

question 2: si j'ai bien compris, ca donne ça?

commande 0

/noyaudecalcul &
sleep 10

commande 1
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
31 mai 2010 à 16:26
commande 0

/noyaudecalcul &
sleep 10

kill %1      # pour tuer le job en arrière-plan

commande 1
0
d'accord!
Alors en fait je n'ai pas été assez précis dans ma demande.
Normalement le noyau de calculs met 1/2 seconde à peu près. Sauf qu'avec cette méthode même s'il a finit, on doit attendre 10 secondes avant de passer à la commande suivante.
Je voudrais que si le temps mis pour l'execution du noyau de calculs est supérieur à 10 secondes le processus soit interrompu sinon on passe directement à la commande suivante dès que le noyau à terminer.

Une idée?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 juin 2010 à 09:51
hello
/noyaudecalcul &
PID=$!
(sleep 10 ; pgrep -l noyaudecalcul | grep -q $PID &&  kill $PID )&
wait $PID 
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
1 juin 2010 à 09:58
Salut dubcek,

Normalement le noyau de calculs met 1/2 seconde à peu près. Sauf qu'avec cette méthode même s'il a finit, on doit attendre 10 secondes avant de passer à la commande suivante.

Ça ne change rien au problème et je ne pense pas qu'il soit possible de mettre en oeuvre ce que demande teab avec un job en arrière plan et la commande wait ;-((
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 juin 2010 à 10:08
le sleep est en arrière plan, le wait va n'attendre qu'1/2 sec. et si il attend plus de 10 secs le kill va tuer PID et le wait se terminer
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
1 juin 2010 à 10:23
Arf, désolé, j'avais pas fait gaffe au sous-shell, je m'étais focalisé que sur le "sleep" ;-((

Toutes mes plates ;-)
0
Bonjour !
Primo, merci! Je n'ai pas encore eu le temps de tester cette solution.
J'aimerai etre sur d'avoir compris.

/noyaudecalcul & ==> lancement en tache de fond
PID=$! ==> ??
(sleep 10 ; pgrep -l noyaudecalcul | grep -q $PID && kill $PID )& ==> en tache de fond: attente de 10s, recuperation du PID du noyaudecalcul et kill du processus
wait $PID

En fait j'ai un doute sur l'insertion de ce code dans une boucle for.
Car imaginons que la boucle est à l'indice i et que le calcul se fasse en 1/2s. Il ne faut pas que la tache de fond (sleep....) kill le processus de la boucle i+1.
Mon explication n'est peut être pas très clair mais j'ai du mal à cerner la difficulté.

Qu'en pensez-vous?
0