Wie genau funktionieren Programme oder Bash-Shell-Befehle auf Linux-Systemen?

Oct 18 2020

Ich erforsche, wie Prozesse und Shell in Linux-Systemen funktionieren. Ich möchte Sie konsultieren, um festzustellen, ob meine Schlussfolgerungen richtig sind.

Wenn wir das System starten, startet der Kernel den Init-Prozess, alles andere wird als Unterprozess mit dem Fork dieses Prozesses ausgeführt. Wenn ich beispielsweise ein Programm ausführe, wird der übergeordnete Prozess für dieses Programm gegabelt, und dann wird der gegabelte Prozess zum untergeordneten Prozess (oder Unterprozess), der das Programm mit exec ausführt. Wenn dies beispielsweise der Fall ist, wenn ich die Bash-Shell ausführe, wird der übergeordnete Prozess gegabelt und exec macht den gegabelten Prozess zum untergeordneten Prozess, auf dem das Bash-Programm ausgeführt wird. An diesem Punkt fällt mir auf, wie die Befehle, die wir in die Bash-Shell eingeben, ausgeführt werden. Wie gehen die eingebauten und externen Befehle durch? Verzweigen oder erstellen integrierte Befehle beispielsweise Unterprozesse für sie?

Antworten

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

Was Sie fragen, gilt für alle Unixe, nicht nur für Gnu / Linux.

Die Sache zu beachten ist, dass nach a fork, muss man nicht ausführen. Bei integrierten Shell-Funktionen teilt sich die Shell auf und führt dann den integrierten Befehl aus.

Die Shell wird auch für eine Sub-Shell gegabelt. Die Shell gabelt sich nicht, wenn dies nicht erforderlich ist: z. B. für einfache Befehle, die integriert sind. Wobei einfach nicht in einer Pipeline enthalten ist.

Es gibt auch (in Ihrer Frage nicht erwähnt) die Rohre. Diese werden vor der Gabelung erstellt, aber nach forkund vor der Gabelung verdrahtet (siehe Einbauten) exec.