本文参考自: 原文地址
为自己这一段时间学的操作系统中关于Linux部分做一个系统性的练习,记录下自己的心得体会。
首先,这是所做的四个题目。
①编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程输出不同的内容。试观察记录屏幕上的显示结果,并分析原因。
②修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示 'parent ……',观察结果,分析原因。
③再调用exec( )用新的程序替换该子进程的内容 ,并利用wait( )来控制进程执行顺序。调用Exit()使子进程结束。
④利用linux的信号量机制实现生产者-消费者问题。(基于进程)
下面总结一下自己每一步的具体操作,给自己留个纪念,也算是抛砖引玉,给大家传授一点儿经验啦!
第一、二两题目:首先,创建.c文件,具体的方式,在我的第一篇博客—--Linux添加系统调用里面讲到过,也可以直接参考这一篇博客,。编辑自己的.c文件,开始写实现代码。
//第一个题目:fork( )创建两个子进程两个子进程,运行观察输出结果 #include <stdio.h> #include<unistd.h> int main( ) { int p1,p2; while((p1=fork( ))==-1); //创建子进程 p1 if (p1==0) printf("daughtern"); else { while((p2=fork( ))==-1); //创建子进程 p2 if(p2==0) printf("sonn"); else printf("parentn"); } } //修改后,第二题每一个进程循环显示一句话 #include<stdio.h> #include<unistd.h> int main( ) { int p1,p2,i; while((p1=fork( ))== -1); /*创建子进程 p1*/ if (p1==0) for(i=0;i<10;i++) printf("daughter %dn",i); else { while((p2=fork( ))== -1); /*创建子进程 p2*/ if(p2==0) for(i=0;i<10;i++) printf("son %dn",i); else for(i=0;i<10;i++) printf("parent %dn",i); } }
这里注意,第一次创建编译过.c文件之后,下一次修改就可以直接打开你的.c文件,注释掉之前的代码,重新编辑保存即可。如图:
写完一段代码,在终端使用命令gcc fork.c -o fork(说明:此处为你自己命的文件名) 在shell中编译该程序,编译结束后,继续输入./fork就可以运行自己刚才所写的程序了。
第一道题目多次运行结果如下:
原因分析:本来从进程并发执行来看,各种情况都有可能。上面的三个进程没有同步措施,父进程与子进程的输出内容会叠加在一起。输出次序带有随机性。
第二道题目多次运行结果:
本文发布于:2024-02-05 07:08:49,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170727033164285.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |