Ordre traitement des processus script shell

Résolu
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

  1. Modérateur
    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
    1. question 1: merci

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

      commande 0

      /noyaudecalcul &
      sleep 10

      commande 1
      0
      1. Modérateur
        commande 0
        
        /noyaudecalcul &
        sleep 10
        
        kill %1      # pour tuer le job en arrière-plan
        
        commande 1
        0
    2. 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
      1. Contributeur
        hello
        /noyaudecalcul &
        PID=$!
        (sleep 10 ; pgrep -l noyaudecalcul | grep -q $PID &&  kill $PID )&
        wait $PID 
        
        0
      2. Modérateur
        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
      3. Contributeur
        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
      4. Modérateur
        Arf, désolé, j'avais pas fait gaffe au sous-shell, je m'étais focalisé que sur le "sleep" ;-((

        Toutes mes plates ;-)
        0
      5. 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