【发布时间】:2012-03-30 13:06:14
【问题描述】:
我想使用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(),对象和变量会发生什么。在调用 fork 之前,它们只是重新分配还是再次为每个孩子重新调用?但我看到的是,它们会为每个孩子重新调用,这是我不想要的。那我该怎么办?
【问题讨论】:
-
您是用 C 还是 C++ 编写代码?任选其一。
-
真的很难理解你想要什么或者你的问题是什么。我猜你不希望你的所有对象都被
fork()写时复制行为所复制。如果是这样,fork()将无济于事。如果你想共享对象,你必须使用线程而不是进程。 -
“重新调用”是什么意思?
-
好的。这不是一个难题。但你正在集中注意力。非常感谢你。所以,在我的代码中有对象创建和函数调用。函数调用意味着我正在尝试一些系统资源,比如一些文件。现在,如果正在分配相同的内存。那么为什么它会打印多个 cout。我在 fork 之前写的。以及为什么它一次又一次地访问我的文件。在每个孩子的创作上。我希望你能好好理解。告诉我哪里错了。请帮助我。
标签: c++ c linux operating-system fork