2015-09-26 40 views
1
pid_t pid; 
pid = fork(); 
if (pid == 0) { 
    fork(); 
} 
if (pid > 0) { 
    fork(); fork(); 
} 
fork();  

我是新来的叉子。我发现很难找到创建过程的数量以及如何绘制图表。任何人都可以有任何提示,让我学习这一点。非常感谢你。学习fork过程和图的任何提示?

此外,fork()> 0 与pid> 0的含义是什么?

回答

0

没有太多的东西,你只需要明白fork(2)返回两次:在父母和新生儿。在父项中,它返回新子项的进程ID;在孩子中它返回0.在极少数情况下,它会返回-1,并且不会创建新进程 - 您可能想要在生产级代码中执行错误处理。

只要记住这一点,然后按照代码。

在这个例子中,我们假设fork(2)总是成功。第一fork()发生在这里:

pid = fork(); 

这条线后,有2个进程运行:其中之一的值为0 pid,其他有一些其他的非零,正值。

然后我们有这样的:

if (pid == 0) { 
    fork(); 
} 

只有以前fork()的孩子将有pid == 0,因此只有过程叉再次之一。

if之后,我们总共运行了3个进程:一个存储在pid中的正值,另外两个存储在pid中。

现在有这样的:

if (pid > 0) { 
    fork(); fork(); 
} 

if只输入在过程中的一个。在if的内部,该过程分叉两次。然后在第一个fork()中创建的孩子再次分叉,因此在if的末尾,我们总共运行了6个进程。

最后:

fork(); 

在这一点上,我们有6个进程运行时,所有的人都会再次分叉,所以我们结束了12道工序。