fork为何会出错,请指点
fork函数的使用,请指点
如下分别创建两个进程分别执行不同的函数,出错,请解释一下出错原因,谢谢!!
function()
{
.
.
/*其他语句*/
.
if( ( pid = fork() ) > 0 )
{
printf("pid[%d]\n",getpid());
}
else if( pid == 0)
{
function1( );
}
else
{
return -1;
}
if( ( pid = fork() ) > 0 )
{
printf("pid[%d]\n",getpid());
}
else if( pid == 0)
{
function2( );
}
else
{
return -1;
}
.
.
.
}
只能用这样的方式吗?
function()
{
.
.
.
for(n=0; n<2; n++)
{
if( ( pid = fork() ) > 0 )
{
printf("pid[%d]\n",getpid());
}
else if( pid == 0)
{
if(n == 0)
{
function1( );
}
else if(n == 1)
{
function2( );
}
}
else
{
return -1;
}
}
.
.
.
}
问题点数:20、回复次数:4Top
1 楼yzx1983(捕风捉影)回复于 2005-10-25 10:07:23 得分 0
没看出有什么逻辑上的区别
出什么错了?Top
2 楼mengge(踏岸寻柳)回复于 2005-10-25 10:33:24 得分 10
fork后进程一分为二,所以在fork时尽量不要使用这种for循环,会出现“意料不到”的情况。
第一次循环,一分为二;
第二次循环,有二为四;
...
这里是几何数级,循环次数越多,新的进程就越多。
在第一个function();中,函数function1();被一个子进程执行了一次,函数function2();被一个新的子进程执行一次、孙进程执行一次;
在第二个function();中,函数function1();被一个子进程执行了一次,函数function2();被一个新的子进程执行一次、孙进程执行一次;
从效果上来看,是没有区别的。Top
3 楼Wolf0403(废人:独活十年~心如刀割)回复于 2005-10-25 11:13:30 得分 5
出错是出什么错?Top
4 楼wanguodu(足文字D)回复于 2005-10-25 12:07:56 得分 5
首先,请确认pid的类型为pid_t;
其次,fork()一般不会返回出错,除非内存紧张,分配不到创建pcb表和页表所需的内存。出错时应返回-1。Top




