实验七编写多进程程序1

实验七编写多进程程序1

ID:31747714

大小:53.98 KB

页数:7页

时间:2019-01-17

实验七编写多进程程序1_第1页
实验七编写多进程程序1_第2页
实验七编写多进程程序1_第3页
实验七编写多进程程序1_第4页
实验七编写多进程程序1_第5页
资源描述:

《实验七编写多进程程序1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、®南昌大学卖验报告一、实验项目名称《编写多进程程序和守护程序》二、实验目的通过编写多进程程序,使读者熟练掌握fork().exec().wait()^waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。(守护进程)通过编写一个完整的守护进程,使读者掌握守护进程编写和调试的方法,并且进一步熟悉如何编写多进程程疗;三、实验内容该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行"Is-1”指令,另一个子进程在暂停5s之后异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后用非阻塞方式等待另一个子进程的退出,待收集到第二个子进程结束的

2、信息,父进程就返冋。(守护进程)在该实验中,读者首先建立起一个守护进程,然后在该守护进程中新建一个子进程,该子进程暂停10s,然后自动退出,并由守护进程收集子进程退出的消息。在这里,子进程和守护进程的退出消息都在系统日志文件(例如“/var/log/messages”,日志文件的全路径名因版本的不同可能会有所不同)中输出。子进程退出后,守护进程循环暂停,其问隔时间为10so四、实验步骤(1)画出该实验流程图该实验流程图如图所示。图实验7」流程图(2)实验源代码(multi_proc.c)先看一下下面的代码,这个程序能得到我们所希望的结果吗,它的运行会产生儿个进程?回忆一下fork()调用

3、的具体过程。/*multi_proc_wrong.c*/#includc#include#include#include#includeintinain(void){pid_tchild1,child?,child;/*创建两个子进程勺child1=fork();child2=fork();/*子进程1的出错处理审if(child1==-l){prin(f(MChildlforkerrorH);exit(l);}elseif(child1==0)/*在子进程1中调用execlp

4、O函数可{printfC'Inchild1:execute*ls-r°);if(execlp(,,ls,NULL)<0){printf(°ChildlexeclperrorM);}}if(child?==-!)/*子进程2的出错处理勺printf(MChild2forkerrorM);exit(l);elseif(child?==0)/*在子进程2中使其暂停5s*/{printf(Mlnchild2:sleepfor5secondsandthenexitM);sleep(5);exit(O);}else/*在父进程中等待两个子进程的退岀*/{printf(HInfath

5、erproccss:");child=waitpid(childl,NULL,0);/*阻塞式等待*/if(child==child1){printf(MGetchild1exitcodeM);}else{printf(MErroroccured!H);}do{child=waitpid(child2,NULL,WNOHANG);/*非阻塞式等待*/if(child==0){printf(HThechild2processhasnotexited!M);sleep(l);1}while(child=0);if(child==child2){printf(MGetchik!

6、2exitcode,f);)else{printf(MErroroccured!n);1}exit(0);编译和运行以上代码,并观察其运行结果。它的结果是我们所希望的吗?看完前而的代码之后,再观察下面的代码,它们之间有什么区别,会解决哪些问题。/*multLproc.c*/#include#include#includc#include#includeinimain(void)pidjchildl,child2,child;/*创建两个子进程勺child1=fork();

7、/*子进程1的出错处理勺if(child1==-1){prinlfC'ChikilforkcrrorH);exit(l);}elseif(childI==0)/*在子进程1中调用cxcclp()函数*/{printf(MInchild1:execute*lsif(execlp(MlsfNULL)<0){printfC'Childlexeclperror,t);}}else/*在父进程中再创建进程2,然后等待两个子进程的退出

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。