質問

プロセスフォークとフォークの息子がexecVを呼び出した後、結果はまだ父親の息子ですか?

役に立ちましたか?

解決

フォークは、親の子と呼ばれる新しいプロセスを作成します..... execは現在の実行プログラムをプロセスエグゼクティブに置き換えます。したがって、親の子プロセスのままです...

他のヒント

はい。 Execvは新しいプロセスを作成しません。そのため、最初にフォークする必要があります。

はい、そうです。また、用語「プロセスファミリ」は、非常に重要な概念である「プロセスグループ」に不快に近づいています。

あなたは正しい軌道に乗っています。基本的に、 フォーク(2) Old Unixのシステムコールインは、新しいPIDと新しいプロセススタックを使用して、分岐したプロセスのコピーを作成し、メモリスペースをコピーして行うことができました。 exec 既存のプロセスに新しい画像をロードします。そのバージョンの1つのバージョンが表示されます exec ほとんどのシェルでの動作 - シェルによって占有されていたプロセスでの目的の画像を使用できません。

プロセスをフォークすると、フォークシステムコールは、親の場合は新しいプロセスのPIDを返し、子供の場合は0を返します。子プロセスは、Stdin、Stdout、およびStderrとしてより一般的に知られているすべてのオープンファイル記述子、特に0,1、および2を継承します。

(ポップクイズ:シェルがリダイレクトを管理すると仮定しますか? >?)

より大きなアドレススペースを持つよりモダンなUNIXバリアント(元のUNIXには合計64Kワードしかありませんでした!) vfork それは、実行を開始するためにプロセスの必要なサブセットのみをコピーし、必要に応じてメモリマネージャーに依存します。ほとんどの場合、フォークはすぐにexecが続くため、とにかく新しい画像をロードする必要がありますが、これは重要な最適化です。

マッハはそれをさらに一歩進めます。新しいpprocessを作成すると、実行コンテキストに必要なもの以外にコピーされません。画像はまったく同じです。コピーは、プロセスがメモリ内の場所を変更した場合にのみ発生します。その時点で、その場所を含むページがコピーされます。これは「書き込みのコピー」と呼ばれ、ほぼ最適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top