我的应用程序需要fork()
,但有时(大约 1/10 倍)fork
不会返回给孩子。我的代码的分叉部分相当于:
void myFunc()
{
pid_t pid = fork();
if( pid == -1 )
{
printf( "Error! %d\n", errno );
exit(1);
}
else if( pid == 0 )
{
printf( "In the child\n" );
_Exit(0);
}
else
{
printf( "In the parent\n" );
int status;
if( waitpid( pid, &status, 0 ) == pid )
{
// check status
}
printf( "Finished waitpid\n" );
}
}
虽然大多数时候我看到输出:
In the parent
In the child
Finished waitpid
有时我只是看到
In the parent
现在,我怀疑这可能是因为我们在这个平台上的内存非常有限,所以我已经超出了父应用程序中的标记,并且没有足够的内存来fork
. 但是,在这种情况下,我希望调用fork()
返回 -1,并且我会陷入错误状态。
是否有可能我仍然会瞬间耗尽内存,但fork()
没有告诉我这件事?