在此代码中创建了多少个进程?

时间:2014-03-21 03:38:12

标签: c fork

我的教科书中有这个问题,我无法解决这个问题。问题是:下面的程序代码中同时运行的最大进程数是多少?

在下面的代码中,没有对fork()进行返回值检查,因此父和子都将执行所有代码,对吧?假设在第一次fork()调用中父母将先等待然后退出,我是错误的吗?那么一次运行的最大进程数是2? (就在父母退出之前,它做了一个分叉)。

int main()
{
    if ( fork() )
        wait(0);
    else
        exit(0);

    if ( fork() )
        wait(0);
    else
    {
        if ( fork() )
            wait(0);
        else
        {
            if ( fork() )
                wait(0);
            else
                exit(0);
        }
    }
    return 0;
}

我认为代码编写得非常糟糕,并且很难清楚代码中实际发生了什么。我非常感谢有用的答案。

提前致谢。

2 个答案:

答案 0 :(得分:2)

  

在下面的代码中没有对fork()进行返回值检查,因此父和子都将执行所有代码,对吧?

没有。如果成功,fork()将在父进程中返回正数,在子进程中返回0。那些if (fork())在父进程中都是正确的。

  

假设在第一次fork()调用中,父进程先等待然后退出,我错了吗?

没有。在wait()返回后,该父级将在下一个if (fork())继续,孩子将退出。

  

那么一次运行的最大进程数是2?

没有。正确的答案是4。

答案 1 :(得分:0)

来自fork(2) manpage

  

成功时,子进程的PID在父进程中返回,   在孩子身上返回0。失败时,返回-1   parent,没有创建子进程,并且正确设置了errno。

所以那些条件就像这样(假设fork成功):

if ( fork() )
{
  // parent, fork() returned the (nonzero) PID of the child process
}
else
  // child, fork() returned 0
}
相关问题