2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > fork()创建多个子进程

fork()创建多个子进程

时间:2022-03-21 16:47:48

相关推荐

fork()创建多个子进程

fork()创建多个子进程

在学习linux中,老师布置了一个作业:

编写一段程序,使用系统调用fork)创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示"a";子进程分别显示字符"b“和字符"c"。试观察记录屏幕上的显示结果,并分析原因。

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){pid_t pid1,pid2;pid1=fork();pid2=fork();if(pid1<0||pid2<0){perror("fork error");}if(pid1==0){printf("pid1 = b\n");}else{printf("father pid = a\n");}if(pid2==0){printf("pid2 = c\n");}else{printf("father pid = a\n");}return 0;}

每次结果都不一样!!!!!

尝试分析…

先设父进程为p100,创建的两个子进程为p101,p102

Pid1=fork(),首先创建一个子进程p101,该程序会继续执行父进程,pid2=fork(),此时创建了第二个子进程p102,此时fork()返回的为创建的pid1的进程号,进入if(pid1==0)的else,执行第一个“father pid = a”,然后再判断pid2,执行第二个 “father pid = a”。

此时父进程p100结束,进入子进程pid1(p101)。根据执行结果看,内核是先执行的pid2(应该是弹栈),那么pid2又做为父进程创建子进程,返回值为子进程pid3,所以有第三个“father pid = a”,然后执行pid2=fork();

pid1=fork();的返回值为0;接下来,pid1又会创建一个子进程pid3(p103)-----执行的是pid2=fork();这一步,

、、懵逼。。。

懵逼的原因就是子进程会再创建子进程,那么不再让子生子就好了↓↓↓↓↓↓↓

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){pid_t pid;int i=0;//父进程先创建子进程,fork()返回值为子进程的pid;然后进入子进程,此时fork()的返回值为0。然后i++,进入下一次循环,创建子进程。这样就没有子进程创建子进程了!!!for (i=0;i<2;i++){pid = fork();if(pid==0){break; //创建完子进程直接跳出循环,防止子生子}}// i是全局变量if(i==0){printf("b\n");}else if(i==1){printf("c\n");}else{printf("a\n");}return 0;}

执行结果正确!!!!!!!!!!!!!!

进一步了解fork()原理

进一步了解fork()原理

进一步了解fork()原理

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。