unix fork()理解

时间:2011-11-05 17:39:11

标签: linux unix fork

int main(){
    fork();
}

我知道这是一个新手问题,但我的理解是父进程现在将分叉一个新的子进程,就像父进程一样,这意味着子进程也应该分叉子进程等等...实际上,这只会产生一个子进程。我不明白孩子会执行什么代码?

4 个答案:

答案 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的本质是一个进程调用它,两个进程从它返回。