Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/03/2014, à 20: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, à 21: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, à 21:31)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

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

abelthorne

Re : Attendre qu'un processus soit lancé ?

Ah, merci, je vais tester.

Hors ligne

#4 Le 26/03/2014, à 22: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 26/03/2014, à 23:00)

Hors ligne

#5 Le 26/03/2014, à 23: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, à 00: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, à 01: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, à 01:03)

Hors ligne

#8 Le 29/03/2014, à 11: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, à 11: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, à 12: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, à 13: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