フォークと複製について少し混乱しています。私はすでにそれを見ました:
フォークはプロセスに使用され、クローンはスレッドに使用されます。
フォークは単にクローンを呼び出し、クローンはすべてのプロセスとスレッドに使用されます。
これは正しいですか?これら2つのシステムコールと2.6 Linuxカーネルの違いは何ですか?
ベストアンサー1
fork()
元のUNIXシステムコールです。スレッドではなく新しいプロセスを作成するためにのみ使用できます。しかも携帯性が良い。
Linuxでは、clone()
新しい実行スレッドを作成するために使用できる新しい多機能システム呼び出しです。渡されたオプションに応じて、新しい実行スレッドはUNIXプロセス、POSIXスレッド、それらの間のセマンティクス、またはまったく異なるセマンティクス(他のコンテナなど)に従うことができます。メモリ、ファイル記述子、さまざまな名前空間、シグナルハンドラなどを共有するかコピーするかを決定するさまざまなオプションを指定できます。
親セットのシステム呼び出しなので、clone()
glibcのシステム呼び出しラッパー実装は実際に呼び出されますが、これはプログラマーが知る必要がない実装の詳細です。以前のバージョンとの互換性のため、実際のシステムコールはまだLinuxカーネルに存在します。しかし、非常に古いバージョンのlibcやglibc以外の他のlibcを使用するプログラムで使用できるため、重複しています。fork()
clone()
fork()
clone()
pthread_create()
スレッドを生成するPOSIX関数を実装するためにも使用されます。
移植可能なプログラムは代わりにfork()
andを呼び出す必要があります。pthread_create()
clone()