fork() と exec() 混同

fork() と exec() 混同

現在のプロセスを分岐すると、親プロセスとしてのプロセスは特性が同じであるがプロセスIDが異なる子プロセスを生成する。したがって、後で子プロセスでexec()を実行すると、プロセスは実行を停止し、停止した子プロセスで実行されているプログラムには独自のプロセスがあります。

これはアプリケーションを実行するのと同じではありませんか?特に、各アプリケーションには独自のプロセスとPIDがあるためです。

ベストアンサー1

はい、それがUNIXで動作する方法だからです。

「アプリケーションの実行」システムコールはありません。これは常に分岐/実行ペアによって行われます。

ところで、exec実際にいいえ新しいPIDを生成します。exec 変えるプロセスの内容(メモリが削除され、まったく新しい実行可能ファイルがロードされます)では、カーネルの状態(開かれたファイル、環境変数、作業ディレクトリ、ユーザーなど)は変更されず、PIDは変更されません。


興味がある場合は、次の内容をよくお読みください。

  • vforkforkそれを除いて良い〜しなければならないこれは常にペアになっており、execucLinuxのように動作しない場合に便利です。fork

  • cloneこれは新機能ですがfork(今日のfork機能はclone後で使用されます)、新しいプロセスの作成を含むより多くの作業を実行します。共有する同じメモリ(たとえば、複製する代わりにfork)をスレッドと呼びます。

おすすめ記事