Created
March 10, 2014 02:36
-
-
Save simark/9458573 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Les étapes entre le moment où on tappe "ls -1 *.txt" suivi de "enter" dans bash et le moment où on peut lire la liste des fichiers à l'écran. C'est très rapide, mais il s'en passe des choses... | |
$ ls -l undossier *.txt | |
-rw-rw-r-- 1 simark simark 0 Mar 9 22:17 bob.txt | |
-rw-rw-r-- 1 simark simark 0 Mar 9 22:17 machin.txt | |
-rw-rw-r-- 1 simark simark 0 Mar 9 22:17 truc.txt | |
undossier: | |
total 0 | |
-rw-rw-r-- 1 simark simark 0 Mar 9 22:29 unfichier | |
(éventuellement les attributs des fichiers seraient plus intéressants) | |
=== Partie bash === | |
On débute avec l'utilisateur qui appuie sur "enter". | |
1 Bash effectue une analyse lexicale et syntaxique de la ligne qu'on vient de lui donner: "ls *.txt\n". | |
2.1 Il remarque que "ls" est le nom du programme qu'on veut exécuter | |
2.2 Il remarque que "*.txt" est une expression qu'il peut développer, et tente donc de le faire. Il en ressort bob.txt, machin.txt et truc.txt. | |
3 Bash vérifie si ls fait partie de ses commandes internes. | |
4 Bash vérifie dans sa table de hachage si une association entre un nom de programme et un chemin existe déjà pour "ls". On suppose que non. | |
5 Bash obtient la valeur de la variable d'environnement PATH. | |
6 Bash vérifie dans chacun des dossiers spécifiés dans PATH, si un fichier nommé "ls" s'y trouverait et serait exécutable. | |
7 Il le trouve dans /bin. Il ajoute cette information à sa table pour plus tard. | |
8 Bash fourche et exécute /bin/ls, en passant la liste de paramètres développés plus tôt | |
=== Partie noyau === | |
On débute avec le fork de bash. | |
1 Un nouveau processus est créé. La plupart de l'état du nouveau processus est copié de son parent. Certaines choses sont en copie sur écriture. | |
2 Un nouvel exécutable remplace celui de Bash dans le processus enfant. | |
=== Partie libc === | |
1 Du code provenant de la bibliothèque standard C utilisée (glibc) est exécuté pour préparer le processus et l'amener jusqu'à l'exécution de la fonction main | |
=== Partie ls === | |
1 ls passe à travers les paramètres qui lui ont été fournis et vérifie ceux qui modifient son comportement (comme -l) | |
2 Pour chaque chemin passé en paramètre, il effectue son travail. | |
3 Il explore le contenu du dossier "undossier". Pour chaque fichier trouvé, les attributs sont inspectés. | |
4 La même chose est faite pour les trois fichiers .txt. | |
5 La fonction main de ls retourne la valeur 0. | |
=== Partie libc 2 === | |
1 D'autre code de glibc est exécuté pour terminer adéquatement le programme. | |
=== Partie noyau 2 === | |
1 Le processus est maintenant zombie. | |
2 Un signal SIGCHLD est envoyé au parent (bash) | |
=== Partie bash 2 === | |
1 Bash reçoit le signal SIGCHLD | |
2 Il vérifie lequel des ses enfants est terminé. | |
3 Il récupère sa valeur de retour et la place quelque part où $? pourra aller la récupérer. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment