新人学unix C 关于fork的问题
本文介绍了新人学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 son
hello i am gra son
**
解决方案
是三个进程父子孙,你这个理解是对的。
光标卡住是因为你的父进程最先退出了,就是你执行的这个程序进程,这样光标提示符自然就出来了,然后你的子进程和孙进程才退出,所以继续打印"i am son"和"iam gra son",而你的子进程和孙进程由于父进程已退出,就不属于当前的终端了,所以当结束后也退不回当前终端进程,所以光标卡在那里
你可以尝试加些sleep到不同的进程,感受一下不同退出顺序时的打印情况
这篇关于新人学unix C 关于fork的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文