From 8fee888eaf3e2dc1b4d09c218d3ce7a971e844d5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kim=20Nguy=E1=BB=85n?= Date: Tue, 16 Sep 2014 12:28:20 +0200 Subject: [PATCH] Rewrite lecture 2. --- unix_prog_web/unix_prog_web_02.xhtml | 217 +++++++++++++++++++++++---- 1 file changed, 187 insertions(+), 30 deletions(-) diff --git a/unix_prog_web/unix_prog_web_02.xhtml b/unix_prog_web/unix_prog_web_02.xhtml index ffc87a0..8298226 100644 --- a/unix_prog_web/unix_prog_web_02.xhtml +++ b/unix_prog_web/unix_prog_web_02.xhtml @@ -41,27 +41,14 @@ - +

Unix et Programmation Web

Cours 2

kn@lri.fr
http://www.lri.fr/~kn
- -
-

Plan

-
    -
  1. Systèmes d'exploitation -
      -
    • 1.1 Principes des systèmes - d'exploitation ✔
    • -
    • 1.2 Système de gestion de fichiers ✔
    • -
    • 1.3 Système de gestion de processus
    • -
    -
  2. -
-
+

Gestion des processus

Définitions

@@ -93,7 +80,7 @@

Exemple: programme

-

Dans un fichier « counter.c » +

Dans un fichier « counter.c » (attention c'est du pseudo C)

@@ -127,7 +114,7 @@ gcc -o counter.exe counter.c
- Le fichier « counter.exe » est un + Le fichier « counter.exe » est un exécutable (fichier binaire contenant du code machine)
./counter.exe ← il faut la permission +x sur le fichier @@ -155,11 +142,11 @@ réveil du thread listen
  • listen - (incrémente count)
    + (incrémente count)
    attente de connexion →
    … fin des 3s
    ← - réveil du thread display + réveil du thread display
  • display (affiche 1 à l'écran)
  • @@ -178,7 +165,7 @@ pendant 50㎲
  • Exécution du processus qui dessine le bureau pendant 50 ㎲
    …
  • - +

    C'est le gestionnaire de processus qui décide quel programme a la main et pour combien de temps (priorité aux @@ -487,7 +474,7 @@

    La commande ps

    Permet d'avoir des informations sur les processus en cours - d'exécution (voir « man ps » pour les + d'exécution (voir « man ps » pour les options):
    $ ps -o user,pid,state,cmd x USER PID S CMD @@ -500,7 +487,7 @@ kim 29869 R ps -o user,pid,state,cmd x

    - +

    États des processus (sous Linux)

    @@ -576,7 +563,7 @@ libre)
    directement en arrière plan en faisant:
    $ gedit &
    On peut envoyer un signal à un - processus avec la commande « kill [-signal] pid Â»
    + processus avec la commande « kill [-signal] pid Â»
    $ kill -9 2345

    @@ -585,18 +572,18 @@ libre)

    Le terminal et le processus sont liés par trois fichiers spéciaux:

      -
    1. L'entrée standard (stdin), reliée +
    2. L'entrée standard (stdin), reliée au clavier
    3. -
    4. La sortie standard (stdout), reliée +
    5. La sortie standard (stdout), reliée à l'affichage
    6. -
    7. La sortie d'erreur (stderr), reliée +
    8. La sortie d'erreur (stderr), reliée à l'affichage

    Dans le shell, on peut utiliser les - opérateurs <, > - et 2> pour récupérer le contenu - de stdin, stdout - et stderr:
    + opérateurs <, > + et 2> pour récupérer le contenu + de stdin, stdout + et stderr:
    $ sort < toto.txt $ ls -l > liste_fichiers.txt @@ -632,6 +619,176 @@ $ ls -l * 2> erreurs.txt

    + +

    Écriture de script shell

    +
    +

    Script shell

    +

    Mentalité Unix beaucoup de petits programmes spécifiques, + que l'on combine au moyen de scripts pour réaliser des actions + complexes. Exemple de fichier script: +

    + + #!/bin/bash + + for i in img_*.jpg + do + base=$(echo "$i" | cut -f 2- -d '_') + nouveau=photo_"$base" + if test -f "$nouveau" + then + echo "Attention, le fichier $nouveau existe déjà" + continue + else + echo "Renommage de $i en $nouveau" + mv "$i" "$nouveau" + fi + done + +
    +
    +

    Rendre un script exécutable

    +

    Si un fichier texte (quel que soit son extension), commence + par les caractères #!/chemin/vers/un/programme, on peut + rendre ce fichier exécutable (chmod +x). Si on l'exécute, + le contenu du fichier est passé comme argument à programme + (qui est généralement un interpréteur) +

    +

    #!/bin/bash signifie que le corps du fichier est passé au + programme bash qui est l'interprète de commande + (le shell). +

    +
    +
    +

    Que mettre dans un script

    +
      +
    • des commandes (comme si on les entrait dans le terminal)
    • +
    • des structures de contrôle (boucles for, if then + else)
    • +
    • des définitions de variables
    • +
    +
    +
    +

    Définitions de variables

    +

    On peut définir des variables au moyen de la notation +VARIABLE=contenu et on peut utiliser la variable +avec la notation $VARIABLE

    +
      +
    • Attention, pas d'espace autour du =
    • +
    • nom de variable en majuscule ou minuscule
    • +
    • contenu est une chaine de caractères. Si elle contient des + espaces, utiliser " ... "
    • +
    +

    exemple de définition :

    + i=123 + j="Ma super chaine" + TOTO=titi + echo $TOTO + +

    exemple d'utilisation: echo $j $i $TOTO
    +affiche « Ma super chaine 123 titi

    +
    +
    +

    Boucles for

    +

    Les boucles for ont la syntaxe: + + for VARIABLE in elem1 ... elemn + do + .... + done + +chaque elemi est expansé (comme une ligne de +commande) avant l'évaluation de la boucle: + + for i in *.txt + do + echo $i est un fichier texte + done + +On peut quitter une boucle prématurément en utilisant break +et passer directement au tour suivant avec continue +

    +
    +
    +

    Conditionnelle

    +

    La syntaxe est : + if commande + then + ... + else + ... + fi + +commande est évaluée. Si elle se termine avec succès, +la branche then est prise. Si elle se termine avec un code +d'erreur, la branche else est prise. On peut utiliser la +commande test qui permet de tester plusieurs conditions +(existance d'un fichier, égalités de deux nombres, ...) et se termine +par un succès si le teste est vrai et par un code d'erreur dans le +cas contraire

    +
    +
    +

    Conditionnelle (exemple)

    +

    On regarde tour à tour si fichier1.txt, fichier2.txt, ... existent : + + for i in 1 2 3 4 5 6 + do + if test -f "fichier$i".txt + then + echo le fichier "fichier$i".txt existe + fi + done + +

    +
    +
    +

    Sous-commandes et chaines

    +

    Il est pratique de pouvoir mettre l'affichage d'une commande + dans une variable. On utilise $( commande ... ): + + MESFICHIER=$(ls *.txt) + for i in $MESFICHIER + do + echo Fichier: $i + done + +Attention à la présence de guillemets autour des variables. S'il y a +f1.txt et f2.txt dans le répertoire courant:
    + + MESFICHIER=$(ls *.txt) + for i in $MESFICHIER + do + echo Fichier: $i + done +affiche: + Fichier: f1.txt + Fichier: f2.txt + + + MESFICHIER=$(ls *.txt) + for i in "$MESFICHIER" + do + echo Fichier: $i + done +affiche: + Fichier: f1.txt f2.txt + +

    +
    +
    +

    Commandes utiles

    +
      +
    • seq m n : affiche la liste de tous les + nombres entre m n
    • +
    • echo ... affiche ses arguments sur la sortie + standard
    • +
    • printf "chaine" ... affiche ses arguments au moyen d'une + chaine de format (comme le printf de C)
    • +
    • date : affiche la date courante
    • +
    • cut : découpe une chaine selon des caractères de + séparations ou des positions
    • +
    +
    +

    Programmes non interactifs

    Processus de type daemon

    -- 2.17.1