Les processus et les flux

Les processus

Processus est le nom générique que l’on donne à tout programme (commande, application, script) qui s’exécute sur le système d’exploitation.

Chaque programme peut se composer d’un ou plusieurs processus. Lorsqu’il se compose de plusieurs processus, on parle de threads.

Chaque processus qui s’exécute sur la machine a un identifiant (le PID), un propriétaire (l’utilisateur qui a déclenché l’exécution du processus) et un processus parent identifié par un PPID.

Voici quelques commandes qui permettent de manipuler des processus, et que vous devez expérimenter :

  • & : placé après le nom du programme à exécuter permet d’exécuter celui-ci en tâche de fond, et donc de récupérer la main dans le terminal.
  • bg : suivi du numéro du processus, permet de mettre le processus en arrière plan (background)
  • fg : suivi du numéro du processus, permet de mettre le processus au premier plan (foreground)
  • Ctrl-Z : passe un processus en arrière plan et suspend son exécution
  • jobs : affiche les processus exécutés dans le terminal en cours
  • top : affiche la liste des processus en cours d’exécution, ainsi que des informations sur la mémoire et le temps processeur qu’ils occupent
  • ps : affiche une sélection de processus selon les critères définis par les options (-e pour tous les processus, -H pour avoir une visualisation arborescente; etc.)
  • Ctrl+C, kill, killall : permet de tuer des processus
  • sleep : effectue une pause de la durée passée en paramètre.

Les flux

Pour s’exécuter, un processus doit recevoir des données, et transmettre des résultats. Parfois, il déclenche également des erreurs. Ces données, ces résultats et ces erreurs constituent des flux que le processus utilise pour communiquer avec l’extérieur.

On distingue trois type de flux :

  • l’entrée standard, stdin (défaut : le clavier, descripteur 0);
  • la sortie standard, stdout (défaut : l’écran, descripteur 1);
  • la sortie d’erreur standard, stderr (défaut : l’écran, descripteur 2)

Des opérateurs permettent de manipuler les flux :

  • > : redirige la sortie du processus à gauche du signe vers le fichier à droite. Si le fichier n’existe pas, il est créé, s’il existe, son contenu est détruit et remplacé par le nouveau contenu
  • >> : fonctionne comme le précédent, mais ajoute le nouveau contenu à la suite de l’ancien
  • < : utilise le fichier de droite en tant que stdin
  • 2> : redirige stderr vers un fichier en le créant ou en l’écrasant s’il existe
  • 2>> : redirige stderr vers un fichier en le créant ou en écrivant à la fin s’il existe.

Les tubes :

La commande | (pipe en anglais) permet à deux processus (locaux) de communiquer. En pratique, cette commande redirige la sortie du premier processus vers l’entrée du second. En d’autres termes, | permet d’utiliser le stdout d’une commande comme stdin d’une autre commande.

Par exemple, la commande suivante va afficher toutes les lignes du fichier test.txt contenant le mot “todo”

cat test.txt | grep "todo"

Les sockets :

Les sockets sont des tubes entre deux processus distants. Ils sont caractérisés par un numéro de port et une adresse IP. Vous étudierez les sockets en programmation système.