fork()
を使用して複数の子を作成したいが、問題に直面している。 LIKE:Linuxでfork()を使用した複数の子の作成
///////////////////////// these are some class objects creation and calling
// There are some functions calling from another class. about 5 functions I invoked.
// and some variables like.
pid_t PID;
int status = 0;
char *x = new char[10];
///////////////////////// This for loop give me multiple children
// now one parent have multiple children in this case 10
for(int i=0; i<10; i++)
{
mNo++;
rNo++;
PID = fork();
if(PID == FORK_ERROR) // fork ERROR!
{
fprintf(stderr, "ERROR! In fork() [FORCE EXITING]... %d\n", errno);
exit(EXIT_FAILURE);
}
else if(PID == CHILD) // Do Child Stuff Here...
{
exit(status);
}
else // Do parent Stuff Here...
{
}
}
PID = wait(&status);
////////////////////////////////////////////
これは私が実装私のコードだったが、いくつかの問題があります。
私は、メモリに子を作成すると、重複したメモリが作成されることをお伺いしたいと思います。私が宣言したオブジェクトも。彼らはfork()
を呼び出すことによって再呼び出しされているのですか?それは、すべての子どものために、クラスに再呼び出しされたメモリ内のオブジェクトがあることを意味しますか?
もし私がフォークして、以前の関数呼び出しと変数がすべての子に対して同じでなければならないが、非冪等の関数ではない。あなたがそれを得ることを願っています。私はこれが非常に単純な問題だと知っていますが、私が取り組んでいるプロジェクトは非常に重要であり、パイプやスレッドではなくfork()
で実装する必要があります。
さらに、私はfork()
の場合、オブジェクトと変数はどうなるのかという質問を繰り返しています。フォークを呼び出す前に、彼らはただ再配分されるのですか、それとも、すべての子供のために再び再登場されますか?しかし、私が見ていることは、彼らが私が欲しくないすべての子供のために再呼び戻されているということです。だから私は何をしなければならないのですか?
CまたはC++でコーディングしていますか?どちらか一方を選択してください。 –
あなたが何を望んでいるのか、何が問題なのかを理解することは本当に難しいです。私が推測していることは、 'fork()'コピーオンライトの振る舞いによって全てのオブジェクトが複製されることを望まないということです。もしそうなら、 'fork()'はあなたを助けません。オブジェクトを共有する場合は、プロセスの代わりにスレッドを使用する必要があります。 – Javier
「再喚起」とはどういう意味ですか? – Sid