分叉过程并等待孩子退出

时间:2012-05-10 06:36:20

标签: c linux process linux-kernel fork

我用C语言编程,并尝试学习分支过程的概念,但是我得到了 与以下程序的输出混淆。所以我需要对此进行一些解释才能继续。

        int main() {
            pid_t pid;
 24         int status, died;
 25         switch(pid = fork()){
 26                 case -1: printf("Can't fork\n");
 27                          exit(-1);
 28                 
 29                 case 0 : printf(" Child is sleeping ...\n"); 
 30                          sleep(5); // this is the code the child runs
 31                          //exit(3); 
 32                          
 33                 default:
 34                          printf("Process : parent is waiting for child to exit\n");
 35                          died = wait(&status); // this is the code the parent runs 
 36                          printf("Child's process table cleared...\n");
 37         }
 38         return 0;
 39 }

The output of the above program is :

Process : parent is waiting for child to exit
Child is sleeping ...
Process : parent is waiting for child to exit
Child's process table cleared...
Child's process table cleared...

在这里,我不明白为什么这个“孩子的流程表清除......”即将到来两次。请解释一下。

平台:Linux,gcc编译器

2 个答案:

答案 0 :(得分:6)

孩子的break语句中没有case因此孩子也会执行default语句

您似乎已注释掉exit(3)。如果它在那里会更好。

答案 1 :(得分:0)

我得到了我所缺少的...这是因为那里没有break语句。如果我会使用break或exit(),输出将不会是这样的。谢谢。