親プロセスを作成するシステムコールは何ですか?

親プロセスを作成するシステムコールは何ですか?

私の理解では、これはfork親プロセスを複製して新しいプロセスを作成するシステムコールです。親プロセスを作成するのは何ですか?Cライブラリを使用して複数のプロセスを作成する場合、最初のプロセスを作成するシステムコールは何ですか?たとえば、./main.o

答え1

カーネル自体にはexecve()、終了することのないプロセス 1 (init) を作成するための内部呼び出しが含まれています。

Init() はプロセス ツリー全体のルートです。すべての既知のサービスとその他の構成済みタスク、およびすべてのログイン デバイスのプロセスをフォークすることから始まります。

答え2

シェルからプログラムを実行する場合、シェルはその親プロセスになります。

シェルは を呼び出しfork()て新しい子プロセスを作成し、その新しいプロセス内でexec()ファミリの 1 つを呼び出してプログラムの実行を開始します。

プログラムが他の(シェル以外の)プロセスによって起動された場合、シーケンスはまったく同じです。

明らかに、これはどこかで開始する必要があります。すべてのプロセスの最終的な祖先はプロセスinit(PID 0) であり、これはユーザー空間を開始するためにカーネルによって魔法のように開始されます。

関連情報