execve()関数
まったく別のプログラムを生成する場合は、execve()関数を発行します。カーネルがそれぞれのプロセスを実行するまでの流れを見てみましょう。
②現在のプロセスのメモリを新しいプロセスのデータで上書きする。
③新しいプロセスの最初の命令から実行開始する。
つまり、まったく別のプログラムを生成する場合は、プロセス数が増えるのではなく、あるプロセスを別のプロセスで置き換えるという形になります。
sngm45.icon生成元のプロセスは、もはや必要なくなる、という前提。
これら一連の手順を具体的に見ていきます。まず実行ファイルを読み出して、プロセスのメモリマップに必要な情報を読み出します。実行ファイルは、プロセスの実行中に用いるコードとデータ以外にも、次のような実行開始に必要なデータを保持しています。 ・コードを含むデータ領域のファイル上オフセット、サイズ、およびメモリマップ開始アドレス
・コード以外の変数などデータ領域についての上記と同じ情報
まったく別のプロセスを新規生成する場合は、親となるプロセスからfork()を発行して、復帰後に子プロセスがexec()を呼ぶという、いわゆる「fork and exewc」の流れになることが多いです。