J'ai lu dans le livre Modern Operating Systems que lorsqu'une commande est exécutée, le shell crée un processus enfant, l'attend jusqu'à ce que l'enfant ait terminé son exécution, puis attend une autre commande de l'utilisateur. C'est en effet le cas pour de nombreux programmes comme gedit
. Le terminal ne prend pas de commandes tant que je n'ai pas fermé gedit
. Cependant, lorsque j'ouvre l' éditeur de code atomique , le shell revient immédiatement, prêt à accepter la commande suivante même avec l'éditeur en cours d'exécution. La fermeture du terminal ne ferme pas l' atome. Cela signifie-t-il que l'éditeur n'a pas été ouvert en tant que processus enfant? Quel est le mécanisme sous-jacent qui rend cela possible?
Courir ps au | grep atom
donne
<username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom
shell
process
background-process
Aswin PJ
la source
la source
ps au | grep atom
dans le terminal et ajouter une sortie à votre question?Réponses:
La question porte sur deux types de programmes:
Dans le premier cas, les programmes qui interagissent avec l'utilisateur dans le shell sont conçus pour s'exécuter complètement avant de retourner le contrôle au shell. Rien de spécial n'est fait.
Le deuxième cas est plus compliqué. En règle générale, le programme va bifurquer (faire une copie de lui-même en mémoire), et s'arranger pour supprimer son association avec le terminal de contrôle du shell , et peut exécuter un autre programme - qui s'exécute indépendamment du shell d'origine. Vous pouvez voir des messages du deuxième programme, mais il n'interagit généralement pas avec vous. Selon la façon dont il est utilisé, vous pouvez avoir
Lectures complémentaires:
la source
daemon
fonction de bibliothèque qui fait tout cela.