Comment fonctionnent exactement les programmes ou les commandes bash shell sur les systèmes Linux?

Oct 18 2020

Je recherche comment les processus et le shell fonctionnent dans le système Linux. Je voudrais vous consulter pour voir si mes conclusions sont correctes.

Lorsque nous démarrons le système, le noyau démarre le processus d'initialisation, tout le reste est exécuté en tant que sous-processus avec le fork de ce processus. Par exemple, lorsque j'exécute un programme, le processus parent est forké pour ce programme, puis le processus forké devient le processus enfant (ou sous-processus) qui exécute le programme avec exec. Si tel est le cas, par exemple, lorsque j'exécute le shell bash, le processus parent forké et exec fait du processus forké le processus enfant sur lequel le programme bash s'exécutera. À ce stade, ce qui me trébuche, c'est la manière dont les commandes que nous entrons dans le shell bash sont exécutées. Comment les commandes intégrées et externes passent-elles? Par exemple, les commandes intégrées bifurquent-elles ou créent-elles des sous-processus pour elles?

Réponses

1 ctrl-alt-delor Oct 18 2020 at 11:43

Ce que vous demandez sera vrai pour tous les Unix, pas seulement Gnu / Linux.

La chose à noter est qu'après a fork, on n'a pas besoin d'exécuter. Donc, pour le shell intégré, le shell va bifurquer, puis exécuter la commande intégrée.

Le shell va également bifurquer pour un sous-shell. Le shell ne forkera pas quand il n'en a pas besoin: par exemple pour les commandes simples intégrées. Où simple inclut pas dans un pipeline.

Il y a aussi (non mentionné dans votre question) les tuyaux. Ceux - ci sont créés avant la fourche, mais câblés après fork, et avant, en option (voir built-ins), exec.