Pendant l'exécution d'une commande, le shell effectue généralement les opérations suivantes :
* Attend : Le shell entre dans un état « attente ». Il met en pause sa propre exécution et ne traite aucune autre commande à partir de l'entrée jusqu'à ce que la commande en cours d'exécution soit terminée. Il s'agit du comportement par défaut de la plupart des commandes.
* Gestion des E/S (le cas échéant) : Le shell peut gérer la redirection d’entrée et de sortie pour la commande. Si la commande utilise `<`, `>`, `>>`, `|` ou d'autres opérateurs de redirection, le shell configure les canaux et descripteurs de fichiers appropriés avant de lancer la commande. Il gère le flux de données entre la commande et ses entrées/sorties.
* Gestion du signal : Le shell gère les signaux (comme les interruptions, SIGINT, envoyées par Ctrl+C). Si un signal est reçu pendant l'exécution d'une commande, le shell peut soit transmettre le signal à la commande en cours d'exécution, soit le gérer lui-même en fonction de sa configuration et du signal spécifique.
* Gestion des processus : Le shell crée un nouveau processus dans lequel la commande doit s'exécuter. Cela sépare l'exécution de la commande de celle du shell, empêchant ainsi les plantages de la commande d'affecter le shell lui-même. Le shell gère ce processus enfant jusqu'à ce qu'il se termine.
* Aucun autre traitement de commande : Il n'interprète ni n'exécute aucune autre entrée jusqu'à la fin de la commande en cours d'exécution (sauf s'il s'agit d'un processus en arrière-plan, voir ci-dessous).
Processus en arrière-plan : L'exception est lorsqu'une commande est exécutée en arrière-plan (en utilisant `&`). Dans ce cas, le shell *n'attend pas*. Il imprime l'ID de processus (PID) du processus en arrière-plan et reprend immédiatement l'acceptation et le traitement des nouvelles commandes de l'utilisateur. Cependant, il gère toujours ce processus en arrière-plan :il vérifie son état, gère les signaux et nettoie lorsqu'il se termine.
En résumé, l’action principale attend. Cependant, en coulisses, une activité importante implique la gestion des E/S, des signaux et des processus pour garantir la bonne exécution et l'intégration de la commande dans l'environnement du shell.
|