Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde:laboratoare:05_fr_processus [2020/03/17 19:17]
diana.ghindaoanu created
— (current)
Line 1: Line 1:
-====== Travail Pratique 5 - Processus 2 ====== 
-=====Avant le TP===== 
- 
-==== Utiliser le terminal ==== 
- 
-Pour ouvrir un nouveau terminal: 
- 
-^ Raccourci ​            ^ Description ​                                         ^ 
-| **''​Ctrl+Alt+t''​** ​  | ouvrir une nouvelle fenêtre de terminal ​             | 
- 
-Vous pouvez utiliser les raccourcis suivants dans le terminal: 
- 
-^ Raccourci ​            ^ Description ​                                        ^ 
-| **''​Ctrl+Shift+t''​** ​  | ouvrir un nouveau tab                       | 
-| **''​Ctrl+PageDown''​** ​ | passer au tab suivant ​                  | 
-| **''​Ctrl+PageUp''​** ​   | passer au tab passe                 | 
-| **''​Alt+<​index>''​** ​   | passer directement a un tab                     | 
-| **''​Ctrl+d''​** ​        | fermer un tab (ou la commande **''​exit''​**) | 
- 
-Pour naviguer dans un terminal, surtout quand la sortie d'une commande a un grand contenu, vous pouvez utiliser les reccourcis suivants: 
- 
-^ Raccourci ​          ^ Description ​              ^ 
-| **''​Shift+PgDown''​** | faire défiler en bas  | 
-| **''​Shift+PgUp''​** ​  | faire défiler en haut  | 
- 
-D'​autres raccourcis utiles: ​ 
- 
-^ Raccourci ​          ^ Description ​              ^ 
-| **''​Ctrl+Shift+c''​** | copier le texte du terminal ​ | 
-| **''​Ctrl+Shift+v''​** | coller le texte dans le terminal | 
-| **''​Shift+Insert''​** | coller le texte dans le terminal | 
- 
-==== Naviguer dans les pages du manuel ==== 
- 
-Les pages de manuel sont souvent volumineuses et nous devons les parcourir rapidement. Pour pouvoir faire ceka, après avoir ouvert la page de manuel d'une commande, nous pouvons utiliser les combinaisons de touches ci-dessous pour naviguer dans la page: 
- 
-^ Touche ​                                 ^ Description ​                                         ^ 
-| /​string_to_search ​                     | ''/''​ (la touche //slash//) est utilisé pour rechercher le **''​string_to_search''​** dans la page de manuel | 
-| **''​n''​** (next) ​                      | pour passer à l'​occurrence suivante du mot recherché avec / | 
-| **''​N''​** (Shift + n)                  | pour revenir à l'​occurrence précédente du mot             | 
-| **''​q''​** (quit) ​                      | pour fermer la page du manuel ​                             | 
-| **''​Enter''​** ​                         | faire défiler une ligne                            | 
-| **''​f''​** (forward) sau **''​Space''​** ​ | faire défiler en bas un écran ​                          | 
-| **''​b''​** (backward) ​                  | faire défiler en haut un écran ​                          | 
-| **''​d''​** (down) ​                      | faire défiler en bas une moitié de l'​écran ​                 | 
-| **''​u''​** (up)                         | faire défiler en haut une moitié de l'​écran ​                 | 
- 
-==== Objectifs ==== 
- 
-  * Comprendre les concepts de processus 
-  * Acquérir des compétences de surveillance et d'​interaction avec les processus 
-  * Acquérir des compétences de travail avec les utilitaires et les commandes Linux 
-  * Connaître les bases de la communication inter-processus:​ tuyaux et signaux 
- 
-==== Courte description du Git ==== 
- 
-Pendant les laboratoires,​ pour télécharger les fichiers nécessaires au laboratoire,​ nous utiliserons Git. Git est un système de contrôle de version et est utilisé pour le contrôle de version de code dans les grands projets logiciels. Ceux qui souhaitent approfondir les concepts derrière la commande ''​ git '',​ ainsi que les utilisations avancées, nous recommandons le cours pratique en ligne sur [[http://​gitimmersion.com/​|gitimmersion]]. 
- 
-Des informations sur le TP d'USO sont sur [[https://​github.com/​systems-cs-pub-ro/​uso-lab|ce repository Git]]. 
- 
-<note important>​ 
-Pour préparer l'​infrastructure du laboratoire,​ exécutez les commandes ci-dessous dans un terminal. Ouvrez un nouveau terminal avec la combinaison de touches ''​Ctrl+Alt+t''​. Dans l'​exemple ci-dessous, ''​student@uso:​~$''​ represente le prompt où vous entrez les commandes, il ne doit pas etre ecrit. 
- 
-<​code>​ 
-student@uso:​~$ cd ~ 
-student@uso:​~$ git clone https://​github.com/​systems-cs-pub-ro/​uso-lab.git 
-student@uso:​~$ cd uso-lab/​02-process/​support/​ 
-</​code>​ 
- 
-</​note>​ 
- 
-Voilà pour la préparation en laboratoire. Commençons maintenant! :-) 
- 
-===== Concepts ===== 
- 
-==== Afficher les processus dans le système (ps, pstree, top, htop) ==== 
- 
-La hiérarchie des processus sous Linux est en forme d'​arbre;​ on peut voir en utilisant ''​pstree''​ (similaire avec ''​tree''​ du système de fichiers) 
- 
-En utilisant''​ps''​sans aucun paramètre, nous voyons les processus dans le shell actuel associés à l'​utilisateur actuel. 
- 
-<code bash> 
-student@uso:​~$ ps 
-  PID TTY          TIME CMD 
-22101 pts/0    00:00:00 bash 
-22209 pts/0    00:00:00 ps 
-</​code>​ 
- 
-Aussi a l'aide de ''​ps''​ on peut visualiser un ''​snapshot''​ avex tous les processus. Ceci peut être réalisé en utilisant deux variantes de la commande: 
- 
-<code bash> 
-student@uso:​~$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-root         ​1 ​ 0.0  0.3 160140 ​ 7044 ?        Ss   ​10:​39 ​  0:02 /sbin/init spla 
-root         ​2 ​ 0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd] 
-[...] 
-student ​ 22101  0.0  0.2  31236  5192 pts/0    Ss   ​19:​38 ​  0:00 bash 
-student ​ 22114  0.0  0.2  31236  5008 pts/1    Ss+  19:38   0:00 bash 
-root     ​22151 ​ 0.0  0.3  25656  6260 ?        S    19:40   0:00 /​sbin/​dhclient ​ 
-student ​ 22191  0.0  0.1  46012  3656 pts/0    R+   ​19:​48 ​  0:00 ps aux 
-</​code>​ 
- 
-Un utilitaire équivalent à Windows Task Manager pour l'​affichage en temps réel des processus en cours d'​exécution,​ en ligne de commande, est htop. 
- 
-<code bash> 
-student@uso:​~$ htop 
-</​code>​ 
- 
-==== Les attibuts d'un processus ==== 
- 
-Le processus est identifié dans le système à l'aide d'un numéro appelé **PID** (process ID). Il est unique dans le système. Lorsqu'​un processus est créé, un nouveau PID est attribué, le prochain libre, en ordre ascendante. 
- 
-Un autre attribut important est PID-ul du processus parent, **PPID**. Ayant une structure hiérarchique,​ tous les processus ont un parent, le parent de tout le monde étant **init** ou **systemd** (selon le système) et il a le PID 1.  
- 
-L'​attribut **COMMAND** nous indique le nom du processus ou de la commande avec laquelle il a été créé: 
-<code bash> 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-student ​ 23176  0.0  0.1  46012  3644 pts/0    R+   ​22:​06 ​  0:00 ps aux 
-</​code>​ 
- 
-Pour une liste complète des attributs, consultez le ** manuel **. 
- 
-==== Foreground & Background (&, fg, bg, jobs) ==== 
- 
-Il existe plusieurs états dans lesquels un processus peut être: 
-    - État de fonctionnement ​ 
-    - L'​état dans lequel il est arrêté: on utilise **Ctrl+Z** 
-    - L'​état dans lequel il est terminé (le processus n'​existe plus): on utilise **Ctrl+C** 
- 
-En appuyant sur une combinaison des touches ci-dessous, nous envoyons un signal au processus: 
- 
-^ Touches ​    ^ Sens                                              ^ 
-| **''​Ctrl+C''​** ​    | envoie ''​SIGINT'' ​                          | 
-| **''​Ctrl+Z''​** ​    | envoie ''​SIGSTOP'' ​      | 
-| **''​Ctrl+\''​** ​   | envoie ''​SIGQUIT'' ​  | 
- 
-Dans la section **Demo** nous montrons comment traverser ces états. 
- 
-==== Signaux (kill) ==== 
- 
-Un utilisateur peut envoyer un signal à un processus en utilisant la commande kill! Il est très important de comprendre que l'​objectif principal de l'​utilitaire n'est pas de tuer les processus, bien qu'il puisse le faire. Une liste de tous les signaux qui peuvent être envoyés est affichée par la commande: 
- 
-<code bash> 
-student@uso:​~$ kill -l    
-</​code>​ 
- 
-Les utilitaires **pkill** et **killall** terminent les processus en utilisant le **nom** du processus et pas le PID (identique a **kill**). 
- 
-==== Redirections (>, >>, <, |) ==== 
- 
-Redirection stdout (standard output, généralement des messages affichés par des commandes similaires à printf en C). Pour rediriger la liste des processus vers un fichier, nous utilisons la commande suivante: 
- 
-<code bash> 
-student@uso:​~$ ps aux > procese.txt 
-</​code>​ 
- 
-Ainsi, nous avons spécifié au processus de ne plus afficher le résultat à l'​écran,​ mais dans un fichier. La différence entre **> ** et ** >> ** est que le premier remplace le contenu du fichier ** process.txt **, tandis que le second ajoute la fin du fichier. 
- 
-L'​operateur **<** utilise de la facon suivante''​commande < fisier.txt''​ définit l'​entrée de commande ''​fisier.txt''​. 
- 
-<code bash> 
-student@uso:​~$ grep "​Disable"​ < vm-actions-log.txt ​ 
-* Disable terminal bell and scrolling in terminal: 
-* Disable cursor blinking in terminal: 
-* Disable DNS usage in SSH server: 
-* Disable automated screen locking: 
-</​code>​ 
- 
-==== Communication interprocessus à l'aide d'un tuyau | ==== 
-L'​operateur **|** est très important et généralement utilisé. Il prend le résultat de la première commande et le propose en entrée de la deuxième commande. Quelques exemples: 
- 
-<code bash> 
-student@uso:​~$ ps aux | grep sleep 
-student ​ 22406  0.0  0.0  16116   828 pts/0    S    20:28   0:00 sleep 1000 
-student ​ 22408  0.0  0.0  23076  1084 pts/0    S+   ​20:​28 ​  0:00 grep --color=auto sleep 
-</​code>​ 
- 
-<code bash> 
-student@uso:​~$ tree | grep Documents 
-├── Documents 
-</​code>​ 
- 
-Nous pouvons enchaîner 2 commandes ou plusieurs. 
- 
-==== Processus daemon ==== 
- 
-Les processus démon sont des processus qui s'​exécutent en arrière-plan. Ce sont généralement des services qui remplissent certaines fonctions spécifiques. Ceux-ci peuvent être reconnus comme ayant le processus parent avec PID 1 (processus init ou systemd). ​ 
- 
-===== Demo ===== 
- 
-==== Afficher les processus du système (ps, pstree, top, htop) ==== 
- 
-En utilisant ''​ps''​ sans aucun paramètre, nous visualisons les processus dans le shell actuel associés à l'​utilisateur actuel. 
- 
-<code bash> 
-student@uso:​~$ ps 
-  PID TTY          TIME CMD 
-22101 pts/0    00:00:00 bash 
-22209 pts/0    00:00:00 ps 
-</​code>​ 
- 
-Aussi avec ''​ps''​ on peut visualiser un ''​snapshot''​ de tous les processus. On a 2 possibilites de l'​utiliser:​ 
- 
-<code bash> 
-student@uso:​~$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-root         ​1 ​ 0.0  0.3 160140 ​ 7044 ?        Ss   ​10:​39 ​  0:02 /sbin/init spla 
-root         ​2 ​ 0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd] 
-[...] 
-student ​ 22101  0.0  0.2  31236  5192 pts/0    Ss   ​19:​38 ​  0:00 bash 
-student ​ 22114  0.0  0.2  31236  5008 pts/1    Ss+  19:38   0:00 bash 
-root     ​22151 ​ 0.0  0.3  25656  6260 ?        S    19:40   0:00 /​sbin/​dhclient ​ 
-student ​ 22191  0.0  0.1  46012  3656 pts/0    R+   ​19:​48 ​  0:00 ps aux 
-</​code>​ 
- 
-Un utilitaire équivalent à Windows Task Manager pour l'​affichage en temps réel des processus en cours d'​exécution,​ en ligne de commande, est ** htop **. 
- 
-<code bash> 
-student@uso:​~$ htop 
-</​code>​ 
- 
-==== Les attributs d'un processus ==== 
- 
-Par défaut, lors de l'​affichage des processus, les attributs suivants sont inclus: 
-<code bash> 
-student@uso:​~$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-[...] 
-</​code>​ 
- 
-Nous pouvons spécifier quels attributs afficher et dans quel ordre nous voulons: 
-<code bash> 
-student@uso:​~$ ps -ax -o ppid,​pid,​cmd 
- ​PPID ​  PID CMD 
-    0     1 /sbin/init splash 
-    0     2 [kthreadd] 
-[...] 
-</​code>​ 
- 
- 
-Pour sélectionner uniquement les processus démarrés par l'​utilisateur student: 
-<code bash> 
-student@uso:​~$ ps -f -u student 
-UID        PID  PPID  C STIME TTY          TIME CMD 
-student ​   900     ​1 ​ 0 11:10 ?        00:00:00 /​lib/​systemd/​systemd --user 
-student ​   901   ​900 ​ 0 11:10 ?        00:00:00 (sd-pam) 
-[...] 
-</​code>​ 
- 
-==== Foreground & Background (&, fg, bg, jobs) ==== 
- 
-Nous utiliserons l'​utilitaire ''​ sleep ''​ comme exemple. Nous devons savoir si notre processus est en cours d'​exécution ou non. Pour le vérifier, depuis un autre terminal, nous utilisons l'​utilitaire ''​ ps '':​ 
- 
-Terminal 1: 
-<code bash> 
-student@uso:​~$ sleep 100 
-</​code>​ 
- 
-Terminal 2: 
-<code bash> 
-student@uso:​~$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-root         ​1 ​ 0.0  0.3 160140 ​ 7044 ?        Ss   ​10:​39 ​  0:02 /sbin/init spla 
-root         ​2 ​ 0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd] 
-[...] 
-student ​ 22268  0.0  0.0  16116   884 pts/0    S    19:54   0:00 sleep 100 
-student ​ 22281  0.0  0.1  46012  3744 pts/0    R+   ​19:​54 ​  0:00 ps aux 
-</​code>​ 
- 
-Nous avons trouvé le processus "​sleep"​ dans le système. Nous pouvons utiliser l'​utilitaire "​pgrep"​ pour trouver le PID du processus. 
-<code bash> 
-student@uso:​~$ pgrep sleep 
-22268 
-</​code>​ 
- 
-Pour terminer le processus, on va utiliser la combinaison de touches **Ctrl+Z**: 
- 
-<code bash> 
-student@uso:​~$ sleep 100 
-student@uso:​~$ ^Z 
-[1]+  Stopped ​                sleep 100 
-student@uso:​~$ jobs 
-[1]+  Stopped ​                sleep 100 
-</​code>​ 
- 
-J'ai utilisé l'​utilitaire ''​ jobs ''​ pour voir quels processus sont actifs dans le terminal actuel. À partir d'ici, nous pouvons utiliser ** bg ** (arrière-plan) pour démarrer le processus de manière interactive ou ** fg ** (premier plan) pour démarrer le processus de manière non interactive. Plus simplement, dans ''​ bg ''​ nous pouvons émettre d'​autres commandes pendant que notre programme est en cours d'​exécution,​ et dans ''​ fg ''​ nous ne pouvons pas émettre d'​autres commandes. 
- 
-==== Signaux (kill) ==== 
- 
-En ce qui suit, on va utiliser la commande **kill** pour envoyer des signaux aux processus. Cette commande ne tue pas nécessairement le processus, malgré son nom. 
- 
-<code bash> 
-student@uso:​~$ kill --help 
-kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] 
-    Send a signal to a job. 
-</​code>​ 
- 
-À partir d'un autre terminal, nous trouvons le PID du processus ''​ sleep ''​ à l'aide de l'​utilitaire ** pgrep **. 
-Pour terminer le processus, nous envoyons le signal 9 (SIGKILL): 
- 
-<code bash> 
-student@uso:​~$ jobs 
-[1]+  Stopped ​                sleep 100 
-student@uso:​~$ pgrep sleep 
-22286 
-student@uso:​~$ kill -9 22286 
-student@uso:​~$ jobs 
-[1]+  Killed ​                 sleep 100 
-</​code>​ 
- 
-On a transmis le signal 9 (SIGKILL) au processus 22286, et il s'est terminé instantanément. 
- 
-==== Redirections ==== 
- 
-Pour rediriger la liste des processus vers un fichier, nous utilisons la commande suivante: 
- 
-<code bash> 
-student@uso:​~$ ps aux > procese.txt 
-</​code>​ 
- 
-Ainsi, nous avons spécifié au processus de ne plus afficher le résultat à l'​écran,​ mais dans un fichier. La différence entre **> ** et ** >> ** est que le premier remplace le contenu du fichier ** process.txt **, tandis que le second ajoute la fin du fichier. 
-Ainsi, en exécutant la commande pour la deuxième fois: 
- 
-<code bash> 
-student@uso:​~$ ps aux >> procese.txt 
-</​code>​ 
- 
-Nous aurons dans le fichier ''​ procese.txt ''​ affiché 2 fois la sortie de la commande. 
- 
-==== Communication interprocessus,​ en utilisant | ==== 
- 
-L'​operateur **|** est très important et généralement utilisé. Il prend le résultat de la première commande et le propose comme entrée dans la deuxième commande. Quelques exemples: 
- 
-<code bash> 
-student@uso:​~$ ps aux | grep sleep 
-student ​ 22406  0.0  0.0  16116   828 pts/0    S    20:28   0:00 sleep 1000 
-student ​ 22408  0.0  0.0  23076  1084 pts/0    S+   ​20:​28 ​  0:00 grep --color=auto sleep 
-</​code>​ 
- 
-<code bash> 
-student@uso:​~$ tree | grep Documents 
-├── Documents 
-</​code>​ 
- 
-===== Basics ===== 
- 
-==== Afficher les processus dans le système (ps, pstree, top, htop) ==== 
- 
-En utilisant ''​ ps ''​ sans aucun paramètre, nous visualisons les processus dans le shell actuel associés à l'​utilisateur actuel. 
-<code bash> 
-student@uso:​~$ ps 
-  PID TTY          TIME CMD 
-22101 pts/0    00:00:00 bash 
-22209 pts/0    00:00:00 ps 
-</​code>​ 
- 
-Parametrul **aux** asociat lui **ps** ne arată toate procesele din sistem: 
- 
-<code bash> 
-student@uso:​~$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-root         ​1 ​ 0.0  0.3 160140 ​ 7044 ?        Ss   ​10:​39 ​  0:02 /sbin/init spla 
-root         ​2 ​ 0.0  0.0      0     0 ?        S    10:39   0:00 [kthreadd] 
-[...] 
-student ​ 22101  0.0  0.2  31236  5192 pts/0    Ss   ​19:​38 ​  0:00 bash 
-student ​ 22114  0.0  0.2  31236  5008 pts/1    Ss+  19:38   0:00 bash 
-root     ​22151 ​ 0.0  0.3  25656  6260 ?        S    19:40   0:00 /​sbin/​dhclient ​ 
-student ​ 22191  0.0  0.1  46012  3656 pts/0    R+   ​19:​48 ​  0:00 ps aux 
-</​code>​ 
- 
-==== Attributs d'un processus ==== 
- 
-Pour sélectionner uniquement les processus lancés par l'​utilisateur étudiant, nous utilisons ** - u **: 
- 
-<code bash> 
-student@uso:​~$ ps -f -u student 
-UID        PID  PPID  C STIME TTY          TIME CMD 
-student ​   900     ​1 ​ 0 11:10 ?        00:00:00 /​lib/​systemd/​systemd --user 
-student ​   901   ​900 ​ 0 11:10 ?        00:00:00 (sd-pam) 
-[...] 
-</​code>​ 
- 
-Nous pouvons spécifier quels attributs afficher et dans quel ordre nous voulons: 
-<code bash> 
-student@uso:​~$ ps -ax -o ppid,​pid,​cmd 
- ​PPID ​  PID CMD 
-    0     1 /sbin/init splash 
-    0     2 [kthreadd] 
-[...] 
-</​code>​ 
- 
-Avant de poursuivre, vous devez vous assurer de comprendre comment naviguer dans une hiérarchie de processus. Pour ce faire, effectuez les exercices suivants, puis vérifiez avec l'​assistant que tout va bien. 
-  - Afficher tous les processus du système qui contiennent des données liées au PID, le PID parent, l'​utilisateur propriétaire du processus et la commande qui a démarré le processus 
-  - Filtrer les processus par l'​utilisateur actuel (student) 
-  - Afficher les processus de manière interactive (folosind top/htop) 
- 
-===== Need to Know ===== 
- 
-==== Foreground & Background (&, fg, bg, jobs) ==== 
- 
-Nous utiliserons le programme bg-proc.sh comme exemple. Il affiche un message "​Tick"​ ou "​Tock"​ chaque seconde. Nous executons le programme: 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ ./​bg-proc.sh ​ 
-Tick! 
-Tock! 
-Tick! 
-^C 
-</​code>​ 
- 
-On l'a arrete **Ctrl+C**: 
- 
-On recommence et cette fois on arrête avec **Ctrl+Z**. Que remarquons-nous?​ 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ ./​bg-proc.sh ​ 
-Tick! 
-Tock! 
-Tick! 
-^Z 
-[1]+  Stopped ​                ​./​bg-proc.sh 
-</​code>​ 
- 
-Nous vérifions si le processus existe toujours dans le système: 
- 
-<code bash> 
-student@uso~/​.../​02-process/​support$ ps aux 
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-root         ​1 ​ 0.0  0.3 160140 ​ 7152 ?        Ss   ​oct08 ​  0:03 /sbin/init splash 
-root         ​2 ​ 0.0  0.0      0     0 ?        S    oct08   0:00 [kthreadd] 
-[...] 
-**student ​ 23597  0.0  0.1  21532  3532 pts/0    T    09:53   0:00 /bin/bash ./​bg-proc.sh** 
-student ​ 23600  0.0  0.0  16116   780 pts/0    T    09:53   0:00 sleep 1 
-student ​ 23601  0.0  0.1  46012  3784 pts/0    R+   ​09:​53 ​  0:00 ps aux 
-</​code>​ 
- 
-Pour redémarrer le processus, nous avons 2 options: 
-  - Nous démarrons le processus ** de manière interactive ** en utilisant la commande ** bg **. Cela signifie que nous pouvons donner des commandes, même si en arrière-plan est un processus qui affiche du texte 
-  - Nous démarrons le processus en mode ** non interactif ** à l'aide de la commande ** fg **. Cela signifie que le processus précédemment arrêté est revenu au premier plan dans le terminal. Nous ne pourrons pas donner d'​autres commandes. 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ ./​bg-proc.sh 
-Tick! 
-Tock! 
- 
-[1]+  Stopped ​                ​./​bg-proc.sh 
-student@uso:​~/​.../​02-process/​support$ bg 
-[1]+ ./​bg-proc.sh & 
-student@uso:​~/​.../​02-process/​support$ Tick! 
-Tock! 
-lsTick! 
- 
-batman.sh ​ bg-proc.sh ​ it-s-a-trap.sh 
-student@uso:​~/​.../​02-process/​support$ Tock! 
-Tick! 
-Tock! 
-^C 
-student@uso:​~/​.../​02-process/​support$ Tick! 
-Tock! 
-</​code>​ 
- 
-Vous remarquerez peut-être que nous avons essayé de terminer le programme en utilisant ** Ctrl + C **. Cela n'a pas été possible car il s'​exécutait en arrière-plan. Pour cela, nous devons mettre le processus au premier plan et le terminer ou trouver le PID et le terminer à l'aide de l'​utilitaire ** kill **. 
- 
-**Exerciții** 
-  - Démarrez le programme **bg-proc.sh**. 
-  - Passez-le au premier plan puis à l'​arrière-plan. 
-  - Terminez le processus avec ** Ctrl + C ** et l'​utilitaire ** kill ** 
-  - Faites de même avec le programme **it-s-a-trap.sh** 
- 
-==== Redirections ==== 
- 
-Pour rediriger la liste des processus vers un fichier, nous utilisons la commande suivante: 
- 
-<code bash> 
-student@uso:​~$ ps aux > procese.txt 
-</​code>​ 
- 
-Un autre example: 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ echo "prima linie din fisier"​ > fis.txt 
-student@uso:​~/​.../​02-process/​support$ cat fis.txt ​ 
-prima linie din fisier 
-student@uso:​~/​.../​02-process/​support$ echo "a2a linie din fisier"​ >> fis.txt ​ 
-student@uso:​~/​.../​02-process/​support$ cat fis.txt ​ 
-prima linie din fisier 
-a2a linie din fisier 
-student@uso:​~/​.../​02-process/​support$ echo "a3a linie din fisier"​ > fis.txt ​ 
-student@uso:​~/​.../​02-process/​support$ cat fis.txt ​ 
-a3a linie din fisier 
-</​code>​ 
- 
-Nous pouvons voir que dans la troisième ligne, nous avons utilisé **> ** au lieu de ** >> ** et nous avons supprimé le contenu précédent du fichier. 
- 
-==== Communication interprocessus,​ en utilisant | ==== 
- 
-Nous pouvons rechercher un certain processus dans le système comme suit: 
-<code bash> 
-student@uso:​~$ ps aux | grep sleep 
-student ​ 22406  0.0  0.0  16116   828 pts/0    S    20:28   0:00 sleep 1000 
-student ​ 22408  0.0  0.0  23076  1084 pts/0    S+   ​20:​28 ​  0:00 grep --color=auto sleep 
-</​code>​ 
- 
-Quelle est la logique derrière la commande? Au lieu de nous montrer à l'​écran le résultat de la commande ** ps aux **, il a été envoyé à la prochaine commande ** grep **. Cette dernière commande a recherché le mot ''​ sleep ''​ dans le résultat des commandes ''​ ps aux ''​. 
- 
- 
-**Exercices** 
-  - Affichez récursivement tous les fichiers et dossiers dans ** uso-lab **, en redirigeant tout vers un fichier. Inspectez le fichier pour vérification. 
-  - Chaînez la commande précédente avec ** grep ** pour rechercher dans les fichiers ** use-lab ** contenant le mot ** lab **. 
- 
-===== Nice to Know ===== 
- 
-Pour cette section, vous devez vous assurer que vous êtes dans le bon répertoire. Exécutez la commande 
-<​code>​ 
-cd ~/​uso-lab/​02-process/​support/​ 
-</​code>​ 
- 
-==== Valeurs d'​erreur ==== 
- 
-Nous pouvons vérifier que la commande précédemment exécutée a été exécutée avec succès en utilisant ** $? **: 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ cat README.md ​ 
-uso 
-=== 
- 
-   * Directorul ''​lab02''​ conține toate fișierele și structura de directoare necesare rezolvării laboratorului 2 de către studenți 
-student@uso:​~/​.../​02-process/​support$ echo $? 
-0 
-student@uso:​~/​.../​02-process/​support$ cat fisier-care-nu-exista.txt 
-cat: fisier-care-nu-exista.txt:​ No such file or directory 
-student@uso:​~/​.../​02-process/​support$ echo $? 
-1 
-</​code>​ 
- 
-Lorsque la valeur est ** 0 **, le processus a été exécuté avec succès. Toute autre valeur differente de 0 est une erreur. 
- 
-**Exercices** 
-  - Essayez d'​afficher un fichier qui n'​existe pas. Quel code d'​erreur recevez-vous?​ 
-  - Essayez d'​exécuter une commande avec des paramètres aléatoires (ex: ps -ewqgew). Quel code d'​erreur recevez-vous?​ 
- 
-==== Structure arborescente des processus ==== 
- 
-Nous affichons tous les processus du système avec les attributs PID, PPID, CMD: 
- 
-<code bash> 
-student@uso:​~/​.../​02-process/​support$ ps ax -o pid,​ppid,​cmd 
-  PID  PPID CMD 
-    1     0 /sbin/init splash 
-[...] 
-19540     2 [jfsSync] 
-22046     2 [kworker/​0:​1] 
-22090   900 /​usr/​lib/​gnome-terminal/​gnome-terminal-server 
-22101 22090 bash 
-22114 22090 bash 
-22234     1 /​usr/​bin/​python3 /​usr/​bin/​update-manager --no-update --no-focus-on-map 
-22559     1 /​usr/​sbin/​cupsd -l 
-22560     1 /​usr/​sbin/​cups-browsed 
-22742     2 [loop10] 
-22785     1 /​usr/​lib/​snapd/​snapd 
-22913     2 [loop12] 
-23200     2 [kworker/​u2:​0] 
-23394   530 /​sbin/​dhclient -d -q -sf /​usr/​lib/​NetworkManager/​nm-dhcp-helper -pf /​run/​dhclient-enp0s8.pid -lf /​var/​lib/​NetworkManager/​dhclient-fda81623-2338-36f 
-23519     2 [kworker/​u2:​1] 
-23974     2 [kworker/​u2:​2] 
-24107 22101 ps ax -o pid,​ppid,​cmd 
-</​code>​ 
- 
-Nous pouvons voir que le parent de la commande exécutée par nous est ** bash **; il a le PID 22101. 
- 
-**Exercices** 
-  - Affichez l'​arborescence des processus. Utilisez l'​utilitaire ** pstree ** mentionné ci-dessus. 
-  - Essayez d'​obtenir ** le même effet ** en utilisant l'​utilitaire ** ps ** (indice: recherchez dans l'​homme le mot ** tree **). 
-  - Quelle est la différence entre les deux modes d'​affichage?​ Offre-t-il les mêmes informations?​ 
-  -  
-===== Get a Life ===== 
- 
- 
-==== Envoi de signaux à un processus ==== 
- 
-Pour cet exercice, vous devez vous assurer que vous êtes dans le bon répertoire. Exécutez la commande 
-<​code>​ 
-cd ~/​uso-lab/​02-process/​support/​ 
-</​code>​ 
- 
-Dans ce répertoire se trouve le script ''​ batman.sh '':​ 
-<​code>​ 
-student@uso:​~/​.../​02-process/​support$ ls 
-batman.sh ​ bg-proc.sh ​ it-s-a-trap.sh 
-</​code>​ 
- 
-Exécutez le script ''​ batman.sh ''​. Le processus intercepte tous les signaux avec des index de 1 à 13, moins 9 (pour des raisons évidentes). Chaque fois qu'il reçoit un signal dont l'​indice est compris entre 1 et 13, il affiche un caractère à l'​écran. Ci-dessous, vous avez le mappage entre les index de signal et le caractère affiché: 
- 
-<columns 50% 50% -> 
- 
-^Index semnal ^ Caracter ^ 
-| 1           ​| ​ o       | 
-| 2           ​| ​ u       | 
-| 3           ​| ​ c       | 
-| 4           ​| ​ d       | 
-| 5           ​| ​ e       | 
-| 6           ​| ​ z       | 
- 
-<​newcolumn>​ 
- 
-^Index semnal ^ Caracter ^ 
-| 7           ​| ​ s       | 
-| 8           ​| ​ h       | 
-| 10          |  (space) | 
-| 11          |  r       | 
-| 12          |  k       | 
-| 13          |  l       | 
- 
-</​columns>​ 
- 
-**2.1** Dans un autre terminal, recherchez le PID du processus et envoyez des signaux pour que le processus affiche la chaîne de caractères ''​ rullz ''​ à l'​écran. 
- 
-==== Récupérer un fichier en utilisant procfs ==== 
- 
-Téléchargez un fichier vidéo sur Internet. Vous pouvez installer et utiliser[[https://​youtube-dl.org|youtube-dl]] pour télécharger un film depuis [[https://​www.youtube.com|YouTube]]. 
- 
-Lancez le film avec un lecteur de film. Pendant l'​exécution,​ supprimez le fichier. 
-Jusqu'​à la fin du film, récupérez le fichier à l'aide de procfs (din ''/​proc''​),​ du directeur du processus du lecteur de film. 
- 
-==== Inspection des commandes d'​enquête sur les processus ==== 
- 
-À l'aide de l'​utilitaire ''​ strace '',​ inspectez les fichiers dans les procfs (dans ''​ / proc ''​) qui sont ouverts par l'​utilitaire ''​ lsof ''​ pour afficher les descripteurs ouverts d'un processus existant, l'​utilitaire ''​ pmap ''​ pour afficher une mémoire et l'​utilitaire ''​ gratuit ''​ pour afficher la mémoire disponible dans le système. 
  
sde/laboratoare/05_fr_processus.1584465458.txt.gz · Last modified: 2020/03/17 19:17 by diana.ghindaoanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0