新人学unix C 关于fork的问题

编程入门 行业动态 更新时间:2024-10-24 06:37:56
本文介绍了新人学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的问题

本文发布于:2023-10-09 06:21:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1474943.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:人学   unix   fork

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!