Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 26/03/2014, à 21:31

abelthorne

Attendre qu'un processus soit lancé ?

Bonsoir,
J'utilise un environnement custom OpenBox + GNOME. Dans mon script qui démarre la session, je lance gnome-settings-daemon puis d'autres logiciels (un panel, etc.). Or, le démon met un peu de temps à se lancer et ça pose quelques problèmes aux softs qui viennent après (par exemple, utilisation des icônes par défaut plutôt que celles du thème paramétré). Je contourne le problème en mettant un sleep après le démon pour attendre quelques secondes avant de lancer le reste. Par tâtonnements, j'ai trouvé qu'une durée de 3 secondes était bonne mais c'est un peu aléatoire et ça dépend peut-être de la config matérielle. Je me demande donc si je pourrais remplacer le sleep 3 par une commande qui ferait la même chose mais qui attendrait que le processus voulu soit lancé plutôt qu'une durée fixe. Est-ce que ça existe ?

Hors ligne

#2 Le 26/03/2014, à 22:25

Sciensous

Re : Attendre qu'un processus soit lancé ?

oui j'ai découvert il n'y a pas longtemps wait ; la commande a attendre doit être en arrière-plan (bg) :

command &
EPID=$!
wait $EPID
la suite

Dernière modification par Sciensous (Le 26/03/2014, à 22:31)

Hors ligne

#3 Le 26/03/2014, à 23:50

abelthorne

Re : Attendre qu'un processus soit lancé ?

Ah, merci, je vais tester.

Hors ligne

#4 Le 26/03/2014, à 23:59

abelthorne

Re : Attendre qu'un processus soit lancé ?

Ça ne marche pas : apparemment il attend dans le vide puisque le démarrage de la session se bloque après le chargement de gnome-settings-daemon...

EDIT : je regarde le man de wait et je vois que ça sert à attendre qu'un processus se termine, apparemment. Donc ça me semble un peu normal que ça ne fonctionne pas.

Dernière modification par abelthorne (Le 27/03/2014, à 00:00)

Hors ligne

#5 Le 27/03/2014, à 00:13

ssdg

Re : Attendre qu'un processus soit lancé ?

sinon, il y a toujours pgrep :
exemple:
dans un terminal lancer:
while  ! pgrep sleep  ; do echo encore un peu; done; echo et voila;

dans un autre attendre un peu et lancer sleep 5

et au moment où la seconde commande est lancée, la première affiche le numéro du processus (pour ce que ça vaut) et affiche "et voilà"
pour économiser des ressources, tu peux remplacer le "echo encore un peu" par un sleep 1;


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#6 Le 27/03/2014, à 01:12

abelthorne

Re : Attendre qu'un processus soit lancé ?

Euh... je vois pas bien comment adapter ça à mon script de lancement de session...

Hors ligne

#7 Le 27/03/2014, à 02:02

Kooothor

Re : Attendre qu'un processus soit lancé ?

en pseudo code :
tant que pgrep gnome-settings-daemon != 1
tu fais rien
else
lance le reste
exit 0

un truc du genre.

Dernière modification par Kooothor (Le 27/03/2014, à 02:03)


Utilisateur d'Archlinux | Cruncheur BOINC | Bépoiste
Admin de Flood.fr | Mon ~ | Mes dotfiles
«Your behavior is not funny and is wasting the time of the federal government !»

Hors ligne

#8 Le 29/03/2014, à 12:15

ssdg

Re : Attendre qu'un processus soit lancé ?

Comme ça?
( while ! pgrep processAAttendre; do sleep 1; done ; logicielALancer ) &


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#9 Le 29/03/2014, à 12:45

abelthorne

Re : Attendre qu'un processus soit lancé ?

J'ai essayé d'adapter la syntaxe comme ça mais sans succès :

while ! pgrep gnome-settings-daemon &
  do sleep 1
done

Où est-ce que je me plante ?

Hors ligne

#10 Le 29/03/2014, à 13:58

ssdg

Re : Attendre qu'un processus soit lancé ?

le & s'applique au while... je ne crois pas que ça aie le moindre sens.

si tu le met après le sleep, tu vas te retrouver avec bash qui lance une miriade de processus qui s'arrêteronnt au bout d'une seconde.

Je pense que le mieux, c'est de mettre les parenthèses.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#11 Le 29/03/2014, à 14:21

Josepe36

Re : Attendre qu'un processus soit lancé ?

Bonjour

pas evident ces histoire de process...

si je peux me permettre, et surtout pour le fun:

#!/bin/bash

gsd_pid="0"
security_counter="0"
security_delay="10"

error_check(){
    echo "gnome-settings-daemon not found."
    exit 1
}

#Ça mange pas de pain
which gnome-settings-daemon 1>/dev/null || error_check
if pidof gnome-settings-daemon
    then
        echo "gnome-settings-daemon already exist."
        exit 0
fi
gnome-settings-daemon &

while true
do
    if (("$gsd_pid" < "1"))
        then
            if pidof gnome-settings-daemon 1>/dev/null
                then
                    gsd_pid=$(pidof gnome-settings-daemon)
                    # on a bien un pid on peut sortir
                    break
            fi
    fi
    sleep 1
    # on se  protege d une boucle infinie
    security_counter=$(( $security_counter + 1 ))
    if (( $security_counter == $security_delay ))
        then
            echo "Error to find gnome-settings-daemon pid"
            # on a atteind le delais d'attente
            break
    fi
done

# Control de sortie de boucle
if (("$gsd_pid" < "1"))
    then
        # pas de pid, on renvoie 1
        exit 1
    else
        # c est cool on peut continuer
        echo "gnome-settings-daemon launched with pid:$gsd_pid."
fi

# suite des instructions ...

exit 0

a adapter bien sûr wink


Développeur distribution Hybryde
www.hybryde.org

Hors ligne

Haut de page ↑