int main(){
fork();
}
我知道这是一个新手问题,但我的理解是父进程现在将分叉一个新的子进程,就像父进程一样,这意味着子进程也应该分叉子进程等等...实际上,这只会产生一个子进程。我不明白孩子会执行什么代码?
答案 0 :(得分:6)
子进程在fork语句之后的最后一个停止的确切位置开始执行。如果你想永远分叉,你必须把它放在一个while循环中。
答案 1 :(得分:4)
正如大家所提到的,孩子也在fork()
完成后开始执行。因此,它不会再次调用fork
。
您可以在非常常见的用法中清楚地看到它:
int main()
{
if (fork())
{
// you are in parent. The return value of fork was the pid of the child
// here you can do stuff and perhaps eventually `wait` on the child
}
else
{
// you are in the child. The return value of fork was 0
// you may often see here an `exec*` command
}
}
答案 2 :(得分:1)
但是孩子(以及父母)在fork
发生之后仍在继续。从应用程序编程的角度来看,fork
(与所有system calls一样)是“原子的”。
两个进程之间的唯一区别(在fork
概念上独立的内存空间之后)是fork
的结果。
答案 3 :(得分:0)
如果孩子继续打电话给fork
,那么孩子将有两个fork
(创建它的那个和它制作的那个),而父母只有一个{给它一个孩子的一个)。 fork
的本质是一个进程调用它,两个进程从它返回。