2012-04-02 66 views
0
... 
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个过程。

我是对的还是我错过了什么?

+3

这功课吗? – littleadv 2012-04-02 18:00:56

+0

这是一个考试问题。 – Tool 2012-04-02 18:02:26

+0

'break'突破**开关**,而不是循环。这是你不了解的吗? – 2012-04-02 18:12:12

回答

2

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

这给我留下了4个线程altoghether

1

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