资源描述:
《山大操作系统实验一.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、山东大学软件学院实验报告 实验题目:参考示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps命令总在ls命令之前执行。实验目的:根据实验中观察和记录的信息结合示例实验和独立实验程序,了解实验程序反映出操作系统教材中进程及处理机管理一节讲解的进程的哪些特征和功能。在真实的操作系统中它是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。了解子进程的创建和新程序的执行情况和信号的机理。硬件环境
2、:CPU:P4/1.8MHz内存:256MB硬盘:10GB软件环境:Ubuntu08.4-Linux操作系统Gnome桌面2.18.3BASH_VERSION='3.2.33(1)-releasegccversion4.1.2vi3.1.2gedit2.18.2OpenOffice2.3实验步骤:1、问题分析编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps命令总在ls命令之前执行。2、算法设计说明父进程要创建两个子进程,两次使用fo
3、rk(),第一个子进程来执行PS命令,第二个执行ls命令,并通过信号来控制ps命令在ls命令之前执行,第二个子进程通过kill命令向第一个子进程发送信号,第一个子进程接到信号后再执行ps命令。结论分析与体会:在这次实验加深了对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。实验代码://exp1.c#include#include
4、#include#include#include#include#include"exp1.h"intmain(intargc,char*argv[]){pid_tpid;//用于保存子进程进程号//intstatus;pid=fork();if(pid<0){/*error*/fprintf(stderr,"ForkFailed");exit(-1);}elseif(pid==0){printf("I
5、amchildprocess%dtodols.",getpid());signal(SIGINT,(sighandler_t)showLs);//注册一个本进程处理键盘中断的函数//pause();//execlp("/bin/ls","ls",NULL);//printf("finishedmy'ls'work");pause();//等待信号}elseif(pid>0){printf("ThisisparentprocessTOperformanotherfork");//再一次fo
6、rk()pid_tpid2;pid2=fork();if(pid2<0){/*fork失败*/fprintf(stderr,"Thesecondforkfailed");exit(-1);}elseif(pid2==0){/*资金进程执行ps命令*/printf("pidtosignalis%d",pid);printf("Iamchildprocess%dtodops.",getpid());//sleep(1);execlp("/bin/ps","ps",NULL);}else{
7、//等待子进程执行完毕之后,发送给执行ls命令的子进程信号//waitpid(pid2,&status,WNOHANG);wait(NULL);printf("Finishedmy'ps'work");kill(pid,SIGINT);//向第一个子进程发送键盘中断信号printf("Signalsend");}//等待所有子进程结束之后,退出wait(NULL);printf("AllChildComplete");exit(0);}}//exp1.h#include8、pes.h>#include#include#include#include#includetypedefvoid(*sighandler_t)(int);voidshowLs(){execlp("/bin/ls","ls",NULL);printf("finishedmy'ls'work");}