我试图找出有多少进程与下面的C代码创建的:
int main ()
{
fork();
if (fork()) {
fork();
}
fork();
return 0;
}
有一对夫妇的事情,我感到困惑:
每次fork()的调用,并在孩子从代码开始启动,或者它启动在当前叉()从创建它? 举例来说,如果第3行的第一个叉叫,我会在第4行,或1号线启动了孩子? 我相信这是一个愚蠢的问题,B / C它会创建一个无限循环,如果每个孩子从一开始就开始了,但我想这个假设是安全的。
接下来,当叉被调用时,确实目前的过程分成两个新的过程,一个是父母和其他孩子,或者是自动父当前的进程,所以真的,仅创建了一个额外的过程。
最后,if语句,我当它实际上是父母,总是0时,它是孩子非常肯定叉返回父id的值。 所以,我是正确的假设,如果语句是假的每一个孩子产生了?
用我的上述假设,这就是我想出的进程树,如果有人认为这是把它扔关闭故障将不胜感激。 在树中的儿童数量代表的代码叉正在发生的线路:
main
| | | |
3 4 5 7 // the main/initial process calls fork 4 times
| | | | |
4 5 7 7 7 // the first fork will see 3 additional forks since it was called
| | // at line 3 and I assume resumes at line 4.
7 7 // The second and third original children would each only callthe
// very last fork(). The last fork has no other forks following.
因此,有创造(包括主)10个总流程。 难道我错了?