Nach meinem Verständnis ist dies fork
der Systemaufruf, der einen neuen Prozess durch Klonen des übergeordneten Prozesses erstellt. Wodurch wird der übergeordnete Prozess erstellt? Wenn Sie eine C-Bibliothek zum Erstellen mehrerer Prozesse verwenden, was war der Systemaufruf zum Erstellen des ersten Prozesses? Zum Beispiel beim Ausführen von./main.o
Antwort1
Der Kernel selbst enthält einen internen Aufruf zum execve()
Erstellen von Prozess 1 (init), der nie beendet wird.
Init() ist die Wurzel des gesamten Prozessbaums. Es beginnt mit der Verzweigung von Prozessen für alle bekannten Dienste und andere konfigurierte Aufgaben sowie für alle Anmeldegeräte.
Antwort2
Wenn Sie Ihr Programm von einer Shell aus ausführen, ist die Shell der übergeordnete Prozess.
Die Shell ruft auf, fork()
um einen neuen untergeordneten Prozess zu erstellen, und ruft dann in diesem neuen Prozess einen Prozess aus der exec()
Familie auf, um mit der Ausführung Ihres Programms zu beginnen.
Wenn Ihr Programm von einem anderen (nicht Shell-)Prozess gestartet wird, ist die Reihenfolge dieselbe.
Offensichtlich muss dies irgendwo beginnen: Der ultimative Vorfahre aller Prozesse ist der init
Prozess (PID 0), der vom Kernel auf magische Weise gestartet wird, um den Benutzerbereich zu starten.