Un shell est une interface de base pour la saisie de commandes sur un système Linux. Grâce à cela, vous pouvez entrer directement une commande ou spécifier un fichier (script) contenant une séquence de commandes à exécuter. Les coquilles sont organisées dans une hiérarchie, et n'importe quelle coquille peut créer une nouvelle coquille. Le nouveau shell est considéré comme un processus enfant - un sous-shell - du shell parent qui le crée.
Par défaut, un sous-shell dépend de son parent en ce sens que si le processus parent se termine, le sous-shell se termine également. Toute sortie est transmise du sous-shell au shell parent.
Comment créer une sous-coque
Dans un script shell Bash, vous créez un sous-shell en utilisant la notation entre parenthèses:
Dans l'exemple, la boucle while est entre parenthèses, ce qui la rend exécutée dans un sous-shell du shell dans lequel le fichier de script est exécuté.
Exécuter une sous-coque en arrière-plan
Sauf si vous spécifiez que le sous-shell doit être exécuté en arrière-plan, le shell parent attend la fin du sous-shell avant de continuer avec le reste du script. Toutefois, si vous souhaitez exécuter des sous-shell en parallèle, vous les exécutez en arrière-plan, ce qui est accompli avec le caractère esperluette suivant l'expression du sous-shell, comme illustré ci-dessous:
Exécution de plusieurs sous-shell en parallèle
Si vous créez plusieurs sous-shell en tant que processus en arrière-plan, vous pouvez exécuter des tâches en parallèle. En règle générale, le système d'exploitation utilise différents processeurs ou cœurs pour chaque processus et sous-processus, en supposant qu'il existe au moins autant de processeurs ou de cœurs que de processus. Sinon, les tâches sont attribuées aux mêmes processeurs ou cœurs. Dans ce cas, le processeur ou le cœur bascule en permanence entre les tâches attribuées jusqu'à ce que les tâches soient terminées. L'exemple suivant comporte deux sous-processus. Le premier compte de 1 à 99 et le second de 1000 à 1099.
Utilisez l'instruction wait pour indiquer au processus parent d'attendre la fin des sous-processus avant de poursuivre le reste du script:
Utilisations pour les sous-coquilles
Les sous-shell sont utiles lorsque des commandes doivent être exécutées dans un environnement ou un répertoire particulier. Si chaque commande est exécutée dans un sous-shell différent, il n'y a aucun risque que des paramètres variables soient mélangés. Une fois l'opération terminée, les paramètres et le répertoire en cours n'ont pas besoin d'être restaurés, car l'environnement du processus parent n'est affecté par aucun de ses sous-processus.
Les sous-shells peuvent être utilisés dans les définitions de fonctions pour pouvoir être exécutés plusieurs fois avec des paramètres différents.