子プロセスを作成する場合、親プロセスから子プロセスにデータをコピーする必要がありますか?

xinghui

Linuxfork()では新しいプロセスを作成するために使用されていることを学びました。子プロセスに新しいメモリを割り当ててから、ファイル記述子などのデータを親プロセスから子プロセスにコピーします。次にexec()、独自のデータをロードしてプロセススペースを上書きするために使用できます。しかし、親プロセスのデータを子プロセスにコピーする必要があるのだろうか?子プロセスの実際のデータをそのプロセススペースに直接ロードするのはどうですか?

バジルスタリンケビッチ

fork(システムコール)アドレス空間仮想メモリ(カーネルはMMUを使用しています)、コピーオンライトプロセスについてもっと読む...

Advanced LinuxProgrammingもお読みくださいこれらの難しい概念を説明するいくつかの章があります。

親プロセスと子プロセスのアドレス空間は異なりますが、フォーク後の親子アドレス空間はほぼ等しくなります(仮想メモリとコピーオンライト技術のおかげです)。唯一の違いは、fork(2)システムコールの結果です(これは[ほぼ]プロセスを作成する唯一の方法です)

execve(2)全体の起動プロセスのアドレス空間(及び実行コンテキスト)を交換し、新しい実行可能プログラム(しばしば開始するために使用されるELFバイナリ実行可能ファイル)。

親プロセスから子プロセスにデータをコピーする必要はありません。カーネルはあなたのためにそれを魔法のようにやっています。

あなたは、いくつかやりたいことがあり、プロセス間通信は通常のパイプ(読み取りを通して、親と子の間(IPC)をパイプ(7) パイプ(2) ポール(2) 設定する必要が...)の前にfork共有メモリを使用することをお勧めします(正しく使用するのは難しいため、初心者の場合は避けてください)が、同期に注意する必要があります。詳細については、shm_overview(7)およびsem_overview(7)参照してください

strace(1)も使用して、いくつかのフリーソフトウェアシェル(sashまたはなどbash)のソースコードを調べます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

メッセージキューは、子プロセスまたは親プロセスでインスタンス化する必要がありますか?

分類Dev

親、子、孫のプロセスがページを共有する場合、コピーオンライトはどのように機能しますか?

分類Dev

子プロセスから親にメッセージを送信する

分類Dev

子プロセスが終了するときに、親はパイプファイル記述子をどのように閉じる必要がありますか

分類Dev

親プロセスから子プロセスを取得する方法

分類Dev

親プロセスから子プロセスの操作結果を取得する

分類Dev

親がフォークを使用する場合、子プロセスは連続メモリ空間に作成されますか?

分類Dev

フォークされた子プロセスをexit()で終了する必要がありますか?

分類Dev

親から子プロセスを切り離します

分類Dev

識別子を使用してセルをデキューできない場合は、識別子のペン先またはクラスを登録するか、ストーリーボードでプロトタイプセルを接続する必要があります

分類Dev

子プロセスは親プロセスのデータ構造を継承しますか?

分類Dev

識別子Cellのセルをデキューできません-識別子のnibまたはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります

分類Dev

子プロセスから親プロセスにメッセージを送り返すことができません

分類Dev

識別子TodoItemRowでセルをデキューできない-識別子のペン先またはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります。

分類Dev

親プロセスから子プロセスにデータを取得できません

分類Dev

親プロセスがまだ実行されている場合、子プロセスのPIDは再利用可能になりますか?

分類Dev

子プロセスでパイプから読み取る場合、読み取りシステムコールは-1を返します

分類Dev

1つのプロセスがブーストプロセス間ライブラリによって作成された共有メモリを切り捨てる場合、プロセスは再マップする必要があります

分類Dev

親プロセスが終了すると、子プロセスの祖父母プロセスが親になりますか?

分類Dev

Pythonスコープ-子スコープは親スコープにアクセスできる必要がありますか?

分類Dev

子プロセスでノードタスクを実行する方法はありますか?

分類Dev

子プロセスにデータを送信する

分類Dev

子プロセスは、親を使用してデータがパイプに書き込まれる前にデータを読み取ります

分類Dev

親コンストラクターから子プロパティにアクセスする

分類Dev

子プロセスのstdoutを別の子プロセスのstdinとして使用すると、データが2番目の子プロセスに渡されないことがあります

分類Dev

データセットに明らかに正しいデータがある場合、パンダのpyplotが「プロットする数値データがありません」というエラーをスローします

分類Dev

親プロセスから作成されたすべての子/孫プロセスのpidを取得します

分類Dev

文字列から子プロセスを作成する方法

分類Dev

フラスコでデプロイする場合、ファイルstyle.cssをどこにコピーする必要がありますか?

Related 関連記事

  1. 1

    メッセージキューは、子プロセスまたは親プロセスでインスタンス化する必要がありますか?

  2. 2

    親、子、孫のプロセスがページを共有する場合、コピーオンライトはどのように機能しますか?

  3. 3

    子プロセスから親にメッセージを送信する

  4. 4

    子プロセスが終了するときに、親はパイプファイル記述子をどのように閉じる必要がありますか

  5. 5

    親プロセスから子プロセスを取得する方法

  6. 6

    親プロセスから子プロセスの操作結果を取得する

  7. 7

    親がフォークを使用する場合、子プロセスは連続メモリ空間に作成されますか?

  8. 8

    フォークされた子プロセスをexit()で終了する必要がありますか?

  9. 9

    親から子プロセスを切り離します

  10. 10

    識別子を使用してセルをデキューできない場合は、識別子のペン先またはクラスを登録するか、ストーリーボードでプロトタイプセルを接続する必要があります

  11. 11

    子プロセスは親プロセスのデータ構造を継承しますか?

  12. 12

    識別子Cellのセルをデキューできません-識別子のnibまたはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります

  13. 13

    子プロセスから親プロセスにメッセージを送り返すことができません

  14. 14

    識別子TodoItemRowでセルをデキューできない-識別子のペン先またはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります。

  15. 15

    親プロセスから子プロセスにデータを取得できません

  16. 16

    親プロセスがまだ実行されている場合、子プロセスのPIDは再利用可能になりますか?

  17. 17

    子プロセスでパイプから読み取る場合、読み取りシステムコールは-1を返します

  18. 18

    1つのプロセスがブーストプロセス間ライブラリによって作成された共有メモリを切り捨てる場合、プロセスは再マップする必要があります

  19. 19

    親プロセスが終了すると、子プロセスの祖父母プロセスが親になりますか?

  20. 20

    Pythonスコープ-子スコープは親スコープにアクセスできる必要がありますか?

  21. 21

    子プロセスでノードタスクを実行する方法はありますか?

  22. 22

    子プロセスにデータを送信する

  23. 23

    子プロセスは、親を使用してデータがパイプに書き込まれる前にデータを読み取ります

  24. 24

    親コンストラクターから子プロパティにアクセスする

  25. 25

    子プロセスのstdoutを別の子プロセスのstdinとして使用すると、データが2番目の子プロセスに渡されないことがあります

  26. 26

    データセットに明らかに正しいデータがある場合、パンダのpyplotが「プロットする数値データがありません」というエラーをスローします

  27. 27

    親プロセスから作成されたすべての子/孫プロセスのpidを取得します

  28. 28

    文字列から子プロセスを作成する方法

  29. 29

    フラスコでデプロイする場合、ファイルstyle.cssをどこにコピーする必要がありますか?

ホットタグ

アーカイブ