IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Bash, background process et initialisation


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Bash, background process et initialisation
    hello,

    je lance un process en background.
    je veux que quand je quitte mon script, mon process soit tué;
    ET je veux également démarrer un processB une fois que le process s'est initialisé (il output sur stdout)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    trap : SIGTERM SIGINT
    node process&
    pid=$!
    #ici au bout de mettons 3secondes, process fait un echo 'initialized'
    waitForBackgroundProcessToEcho 'initialized'
    processB
     
    wait $pid
    if [[ $? -gt 128 ]]
    then
        kill $pid
    fi
    comment puis-je me débrouiller pour avoir l'équivalent de waitForBackgroundProcessToEcho ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    bon je m'en sors ainsi dans les grandes lignes

    un gros fichier temporaire assez dégueux
    un pid récupéré à la oneagain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/bin/bash
    trap : SIGTERM SIGINT
     
    exec 3< <(
      program='machin.js'
      node $program "$@"&
      ps -ef|grep "$program"|grep -v 'grep'|awk '{print $2}'>/tmp/pid
    )
    # Read the output of wminput line by line until one line contains Ready
    while read line; do
       echo $line|grep -q 'localhost' && break;
    done <&3
    # Close the file descriptor
    exec 3<&-
     
    firefox localhost:3000
    #http://stackoverflow.com/questions/9052847/implementing-infinite-wait-in-shell-scripting
    tail -f /dev/null & wait
    if [[ $? -gt 128 ]]
    then
        subPid=$(cat /tmp/pid)
        rm /tmp/pid
        kill $subPid
    fi

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par galerien69 Voir le message
    bon je m'en sors ainsi dans les grandes lignes

    un gros fichier temporaire assez dégueux
    As-tu regardé du côté de "mkfifo"?

    un pid récupéré à la oneagain
    As-tu regardé du côté de "pgrep"?

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'avais réalisé une sorte de pacman qui utilisait plusieurs processus.
    Le script principal s'occupait de l'affichage, les scripts lancés en background s'occupaient de déplacer le joueur et les fantômes.
    Ce n'était pas vraiment optimisé, mais c'était motivant pour gérer les sous-processus et le passage d'information entre les divers script (obligé de passer par des fichiers temporaires ...)

    Une partie du script principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    main_sh=$$
    ...
    ./jeu2_monster.sh $main_sh 1 1.2 2>/dev/null &
    ...
    jeu2_monster.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    ...
    main_sh=$1
    ...
    kill -0 $main_sh
    while [ $? -eq 0 ]
    do
    ...
    	sleep $3
    	kill -0 $main_sh
    done
    Le script jeu2_monster.sh se terminait donc automatiquement si le script principal était arrêté
    Dernière modification par Invité ; 03/11/2014 à 23h33.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ecatomb Voir le message
    gérer les sous-processus et le passage d'information entre les divers script (obligé de passer par des fichiers temporaires ...)
    Ben non! Normalement, on n'est pas obligé de passer par des fichiers temporaires... si on utilise mkfifo (comme indiqué dans mon message précédent)

    Si tu es justement en mode "exercice", je t'en recommande l'essai (euh... si tu es en mode "sérieux", aussi!)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ben je ne connaissais pas ta commande quand j'avais fait mon petit jeu :p
    Il faudra que je teste ça quand j'aurais le temps, ça pourra m'être utile dans le futur.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Ben non! Normalement, on n'est pas obligé de passer par des fichiers temporaires... si on utilise mkfifo (comme indiqué dans mon message précédent)

    Si tu es justement en mode "exercice", je t'en recommande l'essai (euh... si tu es en mode "sérieux", aussi!)
    Commande intéressante, mais qui n'est pas utilisable avec mon petit jeu. J'écrivais dans le fichier au début et puis toute les 1-2 secondes. Par contre la lecture était toutes les secondes.
    Comme c'est de type fifo, il n'y a plus rien une fois qu'on l'a lu


    Citation Envoyé par galerien69 Voir le message
    * Quelqu'un peut-il confirmer que lors d'un sigint celui-ci est propagé aux processus fils?
    Un Ctrl+C d'un script ne va pas stopper ceux lancés en background (via le &). Ils auront comme id de processus père le 1.
    Par contre, si tu ne les lances pas en nohup ils seront arrêtés lorsque tu fermes le terminal.

    Citation Envoyé par galerien69 Voir le message
    * Pourquoi pgrep node -P 'processusPere==$$' me retourne vide et non pas le pid de node?
    Peux-tu tester comme ceci ? D'après le man, le motif doit être à la fin, mais ce n'est pas une fonction que j'utilise donc je fais peux-être une erreur ...

Discussions similaires

  1. error 18 detected in background process
    Par fanah dans le forum Oracle
    Réponses: 1
    Dernier message: 18/01/2011, 11h28
  2. ORA-00445: background process PMON did not start after 120 seconds
    Par wasser dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 10/09/2009, 13h57
  3. Child Process en background
    Par cotede2 dans le forum Windows
    Réponses: 1
    Dernier message: 08/05/2007, 22h18
  4. lancer un process en background
    Par yoda1410 dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/04/2006, 20h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo