プロセス全体の正確なコピーを作成しますか?

プロセス全体の正確なコピーを作成しますか?

fork()プロセスをフォークしますが、すべてのスレッドをコピーしたり、すべてのsのレプリカを作成したりしませんfdfds は親と子の間で共有されます。

私は完全なフォークを作る方法が欲しい。したがって、フォークした後、新しいプロセスは前のプロセスと同じプロセスとスレッドを持ち、すべてのfdsは正確なコピーです。たとえば、通常のファイルは正確なコピーです。 (ファイルパスも同じであるため、2つを望む場合、プロセスには同じパスを持つ2つの異なるファイルがあり、異なる名前空間にある必要がありますか?)サーバーソケットには同じコピーがあります(両方とも競合せずに同じポートをリッスンします。プロセスは異なる名前空間になければなりません(dockerについてのみ知っています))他のすべてはfdできるだけシームレスです。また、フォークが書き込み中にコピーされるようにしたいので、ファイルブロックのコピーとメモリのコピーはページに書き込むときにのみ行われます(プロセスがアドレスmmap空間全体を編集したことを考慮すると(これはJavaが行うことです)!)opened 100G rawディスクファイル(fdisk?)、この要件は意味があります。また、フォークされた新しいプロセスは再フォークできる必要があります。

Linuxの私の狭い理解は、プロセスの完全な複製を可能にします(どんなプロセスがそれ自体で行うかは他のfdプロセスを妨げません)。

誰もがアイデアを持っているか、いくつかの実装がすでに存在していますか?現在、私はシステムコールを傍受するためにlibcでハッキングするつもりです。これはあまりにもハッキングです...またはptraceがプログラム的に遅いようですが、システムコールを傍受するためにptraceを使用することもできますsyscall

何百もの異なるLinuxシステム呼び出しがあり、ただ1つのプログラム呼び出し、、、、、、、、、「... 」をopen考えると、この質問に対する簡単な答えはないようです。簡単な仕事。mmaplseekfcntlsocketsetsockoptioctlcloneshmat

編集:問題を回避するには新しいプロセスに同じがpid必要であるため、dockerまたはpid名前空間も必要です。

ベストアンサー1

おすすめ記事