该程序创建了多少个进程?

时间:2012-04-02 17:59:13

标签: c fork

...
int main(void)
{
    int i;
    for(i=0;i<2;i++){
      switch(fork()){
        case 0:
          sleep(1);
          break;
        default:
          sleep(1);
       }
    }
    while(i--) wait(NULL);
    return 0;
}

您好。我正在尝试理解流程和分叉。

我不确定此代码段创建了多少个进程。

1为主程序,然后主程序复制自己(创建子进程),然后子进程复制(2个子进程和主进程)。

所以这些是3个过程。

我是正确的还是我错过了什么?

2 个答案:

答案 0 :(得分:2)

主线程(t1)中有一个for循环,它将调用fork()两次( - &gt; t1.1,t1.2)。第一个分叉线程(t1.1)有一个迭代,所以它创建另一个( - > t1.1.1)。 t1.2和t1.1.1都没有剩下的迭代,所以没有更多的线程分叉。

这给我们留下4个线程altoghether

答案 1 :(得分:1)

请注意,交换机中两种情况的行为是相同的:sleep(1)然后继续w /循环。既然你的解决方案有两种不同的行为(一种创建了孩子,另一种没有创建),我会说你遗漏了一些东西。