我的教科书中有这个问题,我无法解决这个问题。问题是:下面的程序代码中同时运行的最大进程数是多少?
在下面的代码中,没有对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;
}
我认为代码编写得非常糟糕,并且很难清楚代码中实际发生了什么。我非常感谢有用的答案。
提前致谢。
答案 0 :(得分:2)
在下面的代码中没有对fork()进行返回值检查,因此父和子都将执行所有代码,对吧?
没有。如果成功,fork()
将在父进程中返回正数,在子进程中返回0。那些if (fork())
在父进程中都是正确的。
假设在第一次fork()调用中,父进程先等待然后退出,我错了吗?
没有。在wait()
返回后,该父级将在下一个if (fork())
继续,孩子将退出。
那么一次运行的最大进程数是2?
没有。正确的答案是4。
答案 1 :(得分:0)
成功时,子进程的PID在父进程中返回, 在孩子身上返回0。失败时,返回-1 parent,没有创建子进程,并且正确设置了errno。
所以那些条件就像这样(假设fork成功):
if ( fork() )
{
// parent, fork() returned the (nonzero) PID of the child process
}
else
// child, fork() returned 0
}