欢迎来到天天文库
浏览记录
ID:56919923
大小:21.50 KB
页数:6页
时间:2020-07-24
《实验二 Linux进程、线程及编程.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验二 Linux进程、线程及编程实验一、实验目的1、通过编写一个完整的守护进程,掌握守护进程编写和调试的方法2、进一步熟悉如何编写多进程程序二、实验环境硬件:PC机一台,JXARM9-2410教学实验平台。软件:Windows98/XP/2000系统,虚拟机环境下的Linux系统。三、预备知识1、fork()fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的
2、文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等2、exit()和_exit()的区别_exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的"清理I/O缓冲"一项。3、wait()和waitpid()wait()函数是
3、用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。四、实验内容在该实验中,读者首先创建一个子进程1(守护进程),然后在该子进程中新建一个子进程2,该子进程2暂停10s,然后自动退出,并由子进程1收集子线程退出的消息。在这里,子进程1和子进程2的消息都在系统日志文件(例如“/var/log/messages”,日志文件的全路径名因版本的不同可能会有所不同)中输出。在向日志文件写入消息之后,守护进程(子进程1)循环暂
4、停,其间隔时间为10s。五、实验步骤1.分析下面的代码,注意它的运行会产生几个进程以及掌握fork()调用的具体过程。/*multi_proc_wrong.c*/#include#include#include#include#includeintmain(void){pid_tchild1,child2,child;/*创建两个子进程*/child1=fork();child2=fork();/*子进程1的出错处理*/if(chi
5、ld1==-1){printf("Child1forkerror");exit(1);}elseif(child1==0)/*在子进程1中调用execlp()函数*/{printf("Inchild1:execute'ls-l'");if(execlp("ls","ls","-l",NULL)<0){printf("Child1execlperror");}}if(child2==-1)/*子进程2的出错处理*/{printf("Child2forkerror");exit(1);}elseif(child2==0)/*在
6、子进程2中使其暂停5s*/{printf("Inchild2:sleepfor5secondsandthenexit");sleep(5);exit(0);}else/*在父进程中等待两个子进程的退出*/{printf("Infatherprocess:");child=waitpid(child1,NULL,0);/*阻塞式等待*/if(child==child1){printf("Getchild1exitcode");}else{printf("Erroroccured!");}do{child=waitpid(ch
7、ild2,NULL,WNOHANG);/*非阻塞式等待*/if(child==0){printf("Thechild2processhasnotexited!");sleep(1);}}while(child==0);if(child==child2){printf("Getchild2exitcode");}else{printf("Erroroccured!");}}return0;}此段代码会是我们所希望的结果,如果child1=fork();child2=fork();都成功则会有4个进程,child1=fork();
8、后会才生一个新的进程:主进程、child1,child2=fork()后主进程和child1有分别产生一个新的进程。2.分析下面代码,体会与上一个代码之间的区别,/*multi_proc.c*
此文档下载收益归作者所有