本文介绍了新人学unix C 关于fork的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题 1 #include<stdio.h>
2 #include<unistd.h>
3 int main(void)
4 {
5 pid_t pid_0=-1;
6 pid_t pid_1=-1;
7 if((pid_0=fork())<0){
8 perror("fork error\n");
9 }
10 else if(pid_0==0){
11 if((pid_1=fork())<0){
12 perror("child fork error\n");
13 }else if(pid_1==0){
14 printf("hello i am gra son\n");
15 }else{
16 printf("i am son\n");
17 }
18 }else{
19 printf("i am parent\n");
20 }
21 return 0;
22 }
为啥会打印提示符还有那个光标卡住了我是不是创建了两个进程,加上父进程一共三个进程?***[alex@localhost ~]$ ./a.out i am parent[alex@localhost ~]$ i am sonhello i am gra son**
解决方案是三个进程父子孙,你这个理解是对的。光标卡住是因为你的父进程最先退出了,就是你执行的这个程序进程,这样光标提示符自然就出来了,然后你的子进程和孙进程才退出,所以继续打印"i am son"和"iam gra son",而你的子进程和孙进程由于父进程已退出,就不属于当前的终端了,所以当结束后也退不回当前终端进程,所以光标卡在那里你可以尝试加些sleep到不同的进程,感受一下不同退出顺序时的打印情况
更多推荐
新人学unix C 关于fork的问题
发布评论