1

我的应用程序需要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()没有告诉我这件事?

4

0 回答 0