为什么fork()不能回到孩子身上?

时间:2013-02-05 11:14:44

标签: c++ linux fork

我的申请需要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()没有告诉我这件事?

0 个答案:

没有答案