我用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编译器
答案 0 :(得分:6)
孩子的break
语句中没有case
因此孩子也会执行default
语句
您似乎已注释掉exit(3)
。如果它在那里会更好。
答案 1 :(得分:0)
我得到了我所缺少的...这是因为那里没有break语句。如果我会使用break或exit(),输出将不会是这样的。谢谢。