Linuxフォーク機能とWindowsのCreateProcessの比較-何がコピーされるのですか?

Vitalii:

WindowsアプリケーションをLinuxに移植しています。私はCreateProcessWindowsで子プロセスを実行し、すべての標準ストリーム(in、out、error)をリダイレクトするために使用しています。ストリームのリダイレクトは重要です。メインプロセスはデータを子に送信し、その出力とエラーメッセージを受信します。メインプロセスはメモリとスレッドを多く含む非常に大きなプロセスであり、子プロセスは小さなプロセスです。Linuxでは、そのfork関数はCreateProcessWindows と同様の機能を持っています。ただし、マニュアルには、forkコード、データ、スタックを含む「親プロセスのコピーを作成する」と記載されています。それは、1 GBのメモリ自体を使用する非常に単純なコマンドラインツールを実行するためだけに1 GBのメモリを使用する巨大なプロセスのコピーを作成する場合、1 GBのメモリを最初に複製する必要があることを意味しますfork、次にこの1 GBを1 MBプロセスに置き換えますか?それで、100のスレッドがある場合、100 MBのメモリを必要とする100のプロセスを実行するには、100 GBのメモリが必要ですか?またfork、実行について「わからない」親プロセス内の他のスレッドについてはどうですか、それらは何をしますか?fork「内部」ではどのような機能があり、巨大な親から多くの小さな子プロセスを作成することは本当に効果的な方法ですか?

セルゲイL.:

呼び出すとfork()、最初はVMのみがコピーされ、すべてのページがコピーオン書き込みとしてマークされます。新しい子プロセスには、親プロセスVMの論理コピーがありますが、実際に書き込みを開始するまで、追加のRAMを消費しません。

スレッドについてforkは、呼び出しスレッドのコピーに似た子プロセスで新しいスレッドを1つだけ作成します。

また、呼び出しのexecファミリーのいずれかを呼び出したときに(私はそれを望んでいると思います)、プロセスイメージ全体が新しいイメージに置き換えられ、ファイル記述子のみが保持されます。

親プロセスに開いているファイル記述子がたくさん/proc/self/fdある場合は、必要がない子のすべてのファイル記述子を調べて閉じることをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SVN「作業コピー<パス>がロックされている」の原因は何ですか?

分類Dev

Linuxがインストールされたコンピューターのクローンを作成する最速の方法は何ですか?

分類Dev

Linuxがインストールされたコンピューターのクローンを作成する最速の方法は何ですか?

分類Dev

exec()が呼び出されると何がコピーされますか?

分類Dev

Windows 8でコンピューターを再フォーマットすると、両方の内蔵ハードドライブが消去されますか?

分類Dev

コンピューターでPythonがコンパイルされているVisual Studioのバージョンは何ですか?

分類Dev

NugetJavascriptパッケージがScriptsフォルダーにコピーされるのはなぜですか

分類Dev

C ++独自のオブジェクトスタック。push()で何がコピーされますか?

分類Dev

compizの「pixmapにコピー」機能とは何ですか?

分類Dev

値型変数が関数に渡されるときにどのようにコピーされますか、このコピーを保持するものは何ですか?

分類Dev

誰かがコピー機能が何をするのか説明できますか?

分類Dev

同じWindowsLive IDを使用するコンピューター間で何が同期されますか?

分類Dev

vimdiffを使用して変更をコピーするための推奨される方法は何ですか?

分類Dev

char *がベクターにコピーされないのに、文字列がコピーされるのはなぜですか?

分類Dev

マウントポイントとして機能するディレクトリへのコピー操作で、マウントされたドライブにデータがコピーされないのはなぜですか?

分類Dev

コピーの省略を強制する方法、削除されたコピーコンストラクターで機能しないのはなぜですか?

分類Dev

Clojure仕様の「コンフォーマー」機能、それは何ですか?

分類Dev

ネットワーク共有からファイルをコピーすると、VirtualboxのWindowsでエラーEx80070057が表示されます

分類Dev

ネットワーク共有からファイルをコピーすると、VirtualboxのWindowsでエラーEx80070057が表示されます

分類Dev

左辺値がC ++でコピーされる代わりに移動されるのはいつですか?

分類Dev

「単調」と見なされるためにコンピュータ機能が満たさなければならない要件は何ですか?

分類Dev

フォークされたLinuxプロセスのコピーオンライトを監視することは可能ですか?(具体的にはPython)

分類Dev

配列のコピーを渡すと元の配列値が変更されるのはなぜですか?

分類Dev

コピーされますか?参照型と値型の受け渡しが内部でどのように機能するか

分類Dev

コピーを変更すると、元の配列が変更されるのはなぜですか?

分類Dev

コピーが含まれていないのに、std :: string s = "123"がコピーの初期化と見なされるのはなぜですか?

分類Dev

sshが別のコンピューターに接続されているときの私は誰ですか

分類Dev

最後のオブジェクトがArrayListで複数回コピーされるのはなぜですか?

分類Dev

Pythonでスライスすると、どのタイプのコピーが作成されますか?

Related 関連記事

  1. 1

    SVN「作業コピー<パス>がロックされている」の原因は何ですか?

  2. 2

    Linuxがインストールされたコンピューターのクローンを作成する最速の方法は何ですか?

  3. 3

    Linuxがインストールされたコンピューターのクローンを作成する最速の方法は何ですか?

  4. 4

    exec()が呼び出されると何がコピーされますか?

  5. 5

    Windows 8でコンピューターを再フォーマットすると、両方の内蔵ハードドライブが消去されますか?

  6. 6

    コンピューターでPythonがコンパイルされているVisual Studioのバージョンは何ですか?

  7. 7

    NugetJavascriptパッケージがScriptsフォルダーにコピーされるのはなぜですか

  8. 8

    C ++独自のオブジェクトスタック。push()で何がコピーされますか?

  9. 9

    compizの「pixmapにコピー」機能とは何ですか?

  10. 10

    値型変数が関数に渡されるときにどのようにコピーされますか、このコピーを保持するものは何ですか?

  11. 11

    誰かがコピー機能が何をするのか説明できますか?

  12. 12

    同じWindowsLive IDを使用するコンピューター間で何が同期されますか?

  13. 13

    vimdiffを使用して変更をコピーするための推奨される方法は何ですか?

  14. 14

    char *がベクターにコピーされないのに、文字列がコピーされるのはなぜですか?

  15. 15

    マウントポイントとして機能するディレクトリへのコピー操作で、マウントされたドライブにデータがコピーされないのはなぜですか?

  16. 16

    コピーの省略を強制する方法、削除されたコピーコンストラクターで機能しないのはなぜですか?

  17. 17

    Clojure仕様の「コンフォーマー」機能、それは何ですか?

  18. 18

    ネットワーク共有からファイルをコピーすると、VirtualboxのWindowsでエラーEx80070057が表示されます

  19. 19

    ネットワーク共有からファイルをコピーすると、VirtualboxのWindowsでエラーEx80070057が表示されます

  20. 20

    左辺値がC ++でコピーされる代わりに移動されるのはいつですか?

  21. 21

    「単調」と見なされるためにコンピュータ機能が満たさなければならない要件は何ですか?

  22. 22

    フォークされたLinuxプロセスのコピーオンライトを監視することは可能ですか?(具体的にはPython)

  23. 23

    配列のコピーを渡すと元の配列値が変更されるのはなぜですか?

  24. 24

    コピーされますか?参照型と値型の受け渡しが内部でどのように機能するか

  25. 25

    コピーを変更すると、元の配列が変更されるのはなぜですか?

  26. 26

    コピーが含まれていないのに、std :: string s = "123"がコピーの初期化と見なされるのはなぜですか?

  27. 27

    sshが別のコンピューターに接続されているときの私は誰ですか

  28. 28

    最後のオブジェクトがArrayListで複数回コピーされるのはなぜですか?

  29. 29

    Pythonでスライスすると、どのタイプのコピーが作成されますか?

ホットタグ

アーカイブ