From: Tarik Fdil <[EMAIL PROTECTED]>
Subject: Re: [CBLX] Ligne de commandes et mise à niveau:
Date: Sun, 06 Jul 2008 12:33:36 +0100
> Samuel Thibault wrote:
> > Heu, le résultat est effectivement cela, mais l'explication est un peu
> > différente. Dans les deux cas les trois commandes sont exécutées dans
> > trois processus différents ; mais dans le deuxième cas, c'est un
> > sous-shell qui s'occupe de les lancer, et c'est la sortie de ce
> > sous-shell (donc des trois commandes aussi) qui est redirigée.
> >
> Merci Samuel. J'avais écrit une bêtise. Ton explication est juste, pas
> la mienne.
>
> En fait il est évident qu'un programme s'exécute obligatoirement dans
> son propre processus et il n'y a pas de ménage à plusieurs dans un même
> processus. Mais pour en avoir le coeur, je me suis fabriqué cette petite
> manip pour illustrer ce comportement du shell.
>
> J'ai créé deux scripts shells cmd1 et cmd2 contenant tous les deux la
> même commande "sleep 1m" permettant d'endormir le processus durant 1
> minute, temps largement suffisant pour me permettre d'effectuer des "ps
> -af" sur une autre console pour voir les numéros de processus lancés
> (PID) et les numéros de leur processus père (PPID).
>
> J'ai donc lancé respectivement "./cmd1;./cmd2" puis "(./cmd1;./cmd2)"
> et finalement "./cmd1 && ./cmd2" Voici les résultats :
>
> 1er cas (point-virgule sans les parenthèses)
>
> PID 17333 (mon bash) crée, à une minute d'intervalle, deux procesus:
> 1- immédiatement le PID 18449 (bash) qui lance immédiatement le PID
> 18450 (sleep 1m)
> 2- une minute après nouveau processus PID 18524 (bash) qui lance
> immédiatement PID 18525 (sleep 1m)
>
> 2ème cas (point-virgule avec les parenthèses)
>
> PID 17333 (mon bash) crée immédiatement un procesus de PID 19109 (le
> sous-shell) qui lui même crée, à une minute d'intervalle, deux processus :
>
> 1- immédiatement PID 19110 (bash) qui lance immédiatement PID 19111
> (sleep 1m)
> 2- une minute après nouveau processus PID 19175 (bash) qui lance
> immédiatement PID 19176 (sleep 1m)
>
> Le comportement décrit par Samuel est évidemment bien respecté. Petite
> complication due à l'exemple que j'ai pris : cmd1 et cmd2 sont des
> scripts, ils s'exécutent donc eux même dans un shell qui lance la
> commande sleep, d'où le doublement de processus relevés.
>
> Le troisième cas suggéré par Pierre avec utilisation de && comme
> séparateur au lieu du point virgule s'apparente en termes de processus
> lancés au 1er cas sans les parenthèses. Donc pas de sous-shell créé.
>
> Pour être complet sur cette question, on peut aussi utiliser le ||
> (double barre, altgr-6) comme séparateur de commande pour réaliser un ou
> logique. C'est-à-dire que la commande suivante s'exécute uniquement si
> la précédente a échoué. Cela permet de faire dans les scripts des
> messages d'erreurs du genre :
> "cmd1 || echo cmd1 a échoué" Le message d'échec ne s'affiche que si
> cmd1 a réellement échoué.
>
> Dernière précision : comment le shell sait-il qu'une commande a réussi
> ou échoué ? c'est la valeur retournée par une fonction de type exit dans
> le schell ou dans le langage C. Si la commande exécute "exit 0", elle va
> retourner au shell la valeur 0 qui signifie tout va bien, RAS, la
> commande a réussi. Si la commande retourne autre chose que 0, cela
> signifie que la commande a échoué et le numéro retourné peut être
> utiliser pour savoir le numéro et donc la nature de l'erreur rencontré.
> Le shell reporte la valeur retournée par la dernière commande exécuté
> dans la variable $?.
>
> Finalement pour revenir à la question initiale de Michel, la commande
> suivante serait bien appropriée :
>
> sudo apt-get update && sudo apt-get upgrade
>
> Si le update n'a pas marché, le upgrade ne sera pas lancé.
>
> Cordialement
>
> Tarik
Merci Tarik ! Dans le style tutoriel, pas mal du tout et
assurément moins aride que man bash !
Bien à toi
Pierre
_______________________________________________
Liste de diffusion CarrefourBLinuX
[email protected]
http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Pour s'inscrire par courriel :
'mailto:[EMAIL PROTECTED]'
Pour se retirer de la liste par courriel :
'mailto:[EMAIL PROTECTED]'
Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
http://fr.groups.yahoo.com/group/carrefourblinux/messages
Rechercher : http://lists.freearchive.org/cgi-bin/search.cgi
Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Fiches EDU : http://blinuxwiki.pbwiki.com/FichesEdu