現在のプロセスを分岐すると、親プロセスとしてのプロセスは特性が同じであるがプロセスIDが異なる子プロセスを生成する。したがって、後で子プロセスでexec()を実行すると、プロセスは実行を停止し、停止した子プロセスで実行されているプログラムには独自のプロセスがあります。
これはアプリケーションを実行するのと同じではありませんか?特に、各アプリケーションには独自のプロセスとPIDがあるためです。
ベストアンサー1
はい、それがUNIXで動作する方法だからです。
「アプリケーションの実行」システムコールはありません。これは常に分岐/実行ペアによって行われます。
ところで、exec
実際にいいえ新しいPIDを生成します。exec
変えるプロセスの内容(メモリが削除され、まったく新しい実行可能ファイルがロードされます)では、カーネルの状態(開かれたファイル、環境変数、作業ディレクトリ、ユーザーなど)は変更されず、PIDは変更されません。
興味がある場合は、次の内容をよくお読みください。
vfork
fork
それを除いて良い〜しなければならないこれは常にペアになっており、exec
ucLinuxのように動作しない場合に便利です。fork
clone
これは新機能ですがfork
(今日のfork
機能はclone
後で使用されます)、新しいプロセスの作成を含むより多くの作業を実行します。共有する同じメモリ(たとえば、複製する代わりにfork
)をスレッドと呼びます。