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

Répondre à