X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=unix_prog_web%2Funix_prog_web_02.xhtml;fp=unix_prog_web%2Funix_prog_web_02.xhtml;h=0000000000000000000000000000000000000000;hb=564cbcc2c27a723d2bdf12cf690a66eb7f36b813;hp=829822618c520c37ff431433e1f673e340895eda;hpb=1f1881ec66dcaac7b574a13eb78f61249b4f6308;p=hacks%2FsimpleWebSlides.git diff --git a/unix_prog_web/unix_prog_web_02.xhtml b/unix_prog_web/unix_prog_web_02.xhtml deleted file mode 100644 index 8298226..0000000 --- a/unix_prog_web/unix_prog_web_02.xhtml +++ /dev/null @@ -1,1276 +0,0 @@ - - - -
-Programme | séquences d'instructions effectuant - une tâche sur un ordinateur | -
Exécutable | fichier binaire contenant des - instructions machines interprétables par le - microprocesseur | -
Thread | -plus petite unité de traitement (⡠- séquence d'instructions) pouvant être ordonnancée par - l'OS - | -
Processus | -instance d'un programme (⡠« un - programme en cours d'exécution »). Un processus est constitué - de un ou plusieurs threads. | -
Dans un fichier « counter.c » - (attention c'est du pseudo - C)
- int count = 0;
- int exit = 0;
- void display() {
- while (exit == 0) {
- sleep (3);
- printf("%i\n", count);
- }
- }
- void listen() {
- while (exit == 0) {
- wait_connect(80);
- count++;
- }
- }
- void main () {
- run_function(display);
- run_function(listen);
- while (getc () != '\n') { };
- exit = 1;
- return;
- }
- Compilation
-
- gcc -o counter.exe counter.c
-
- Le fichier « counter.exe » est un
- exécutable (fichier binaire contenant du code machine)
-
- ./counter.exe â il faut la permission +x sur le fichier
-
-
- Le contenu de l'exécutable est copié en mémoire et le processeur
- commence à exécuter la première instruction du programme.
-
listen
- Les threads partagent leur mémoire (variables communes)
-(différence: les processus - ne partagent pas leur espace mémoire)
-counter.exe
pendant 50ã²
- firefox.exe
- pendant 50㲠C'est le gestionnaire de processus qui décide quel
- programme a la main et pour combien de temps (priorité aux
- tâches critiques par exemple)
- Le système d'exploitation stocke pour chaque processus un
- ensemble d'informations, le PCB (Process Control Block).
-
Le PCB contient:
-Un processus change d'état au cours de son exécution
-Nouveau | le processus est en cours de création |
Exécution | le processus s'exécute |
En attente | le processus attend un évènement - particulier (saisie au clavier, écriture sur le disque, - â¦) |
Prêt | le processus est prêt à reprendre son - exécution et attend que l'OS lui rende la main |
terminé | le processus a fini son exécution |
L'OS détermine et modifie l'état d'un processus:
-ps
Permet d'avoir des informations sur les processus en cours
- d'exécution (voir « man ps » pour les
- options):
- $ ps -o user,pid,state,cmd x
- USER PID S CMD
- â¦
- kim 27030 Z [chrome] <defunct>
- kim 27072 S /opt/google/chrome/chrome --type=renderer
- kim 29146 S bash
- kim 29834 S evince
- kim 29858 S emacs cours.xhtml
- kim 29869 R ps -o user,pid,state,cmd x
-
-
R | Running (en cours d'exécution) |
S | Interruptible sleep (en attente, - interruptible) |
D | Uninterruptible sleep (en attente, - non-interruptible) |
T | Stopped (interrompu) |
Z | Zombie (terminé mais toujours - listé par le système) |
L'OS peut envoyer des signaux à un processus. Sur réception - d'un signal, un processus peut interrompre son comportement normal - et exécuter son gestionnaire de signal. Quelques signaux: -
-Nom | Code | Description |
---|---|---|
HUP | 1 | demande au processus de - s'interrompre |
INT | 2 | demande au processus de se - terminer |
ABRT | 2 | interrompt le processus et produit - un dump |
KILL | 9 | interrompt le processus immédiatement - |
SEGV | 11 | signale au processus une erreur mémoire - |
STOP | 24 | suspend l'exécution du processus - |
CONT | 28 | reprend l'exécution d'un processus suspendu - |
Un processus est lié au terminal dans lequel il est
- lancé. Si on exécute un programme dans un terminal et que le
- processus ne rend pas la main, le terminal est bloqué
-
-
- $ gedit
-
-
- On peut envoyer au processus le signal STOP en
- tapant ctrl-Z
dans le terminal:
-
-
- $ gedit
- ^Z
- [1]+ Stopped gedit
-
-
- Le processus est suspendu, la fenêtre est gelée (ne répond plus).
-
On peut reprendre l'exécution du programme de deux
- manières:
- $ fg
- Reprend l'exécution du processus et le remet en avant plan (terminal
- bloqué)
- $ bg
- Reprend l'exécution du processus et le remet en arrière plan (terminal
-libre)
- On peut lancer un programme
- directement en arrière plan en faisant:
- $ gedit &
- On peut envoyer un signal à un
- processus avec la commande « kill [-signal] pid »
- $ kill -9 2345
-
Le terminal et le processus sont liés par trois fichiers - spéciaux:
-Dans le shell, on peut utiliser les
- opérateurs <, >
- et 2> pour récupérer le contenu
- de stdin, stdout
- et stderr:
-
-$ sort < toto.txt
-$ ls -l > liste_fichiers.txt
-$ ls -l * 2> erreurs.txt
-
-
Dans le shell, l'opérateur | permet
- d'enchaîner la sortie d'un programme avec l'entrée d'un
- autre:
- $ ls -l *.txt | sort -n -r -k 5 | head -n 1
-
-rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt
- -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt
- -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt
- -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt
- -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt
- -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt
-
- -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt
-
- 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
-
-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). -
-On peut définir des variables au moyen de la notation
-VARIABLE=contenu
et on peut utiliser la variable
-avec la notation $VARIABLE
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
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
-
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
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
-
-
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
-
- Un daemon (prononcé démon) est un processus - qui non-interactif qui tourne en tâche de fond (pas - d'entrée/sortie sur le terminal, pas d'interface graphique, â¦). On - communique avec ce processus via des signaux ou en lisant - ou écrivant dans des fichiers ou connexions réseau. Le plus souvent, - leur but est de fournir un service -
-Exemple de scénario: « Les utilisateurs doivent interagir avec - le matériel. L'accès au matériel demande des droits - administrateur. » -
-Nom | Description |
---|---|
sshd | shell distant sécurisé |
crond | exécution périodique de programmes |
cupsd | serveur d'impressions |
pulseaudio | serveur de son (mixe les sons des - différentes applications) |
udevd | détection de matériel hotplug |
nfsd | serveur de fichier réseau |
smtpd | livraison des e-mail |
httpd | serveur de pages Web |
-
- Des processus clients communiquent
- avec le serveur à travers le
- réseau. Les clients sont indépendant et ne communiquent pas entre
- eux. Attention plusieurs clients peuvent se trouver su la
- même machine physique!
-
Exemples: serveur de bases de données, serveur mail, serveur Web, - terminal de carte bancaire, â¦
-