还剩3页未读,继续阅读
文本内容:
实验一进程控制
一、实验目的加深对进程概念的理解,明确进程和程序的区别;掌握操作系统的进程创建和终止Linux操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序
二、实验平台虚拟机以上VMWare9操作系统以上Ubuntu
12.04编辑器Gedit|Vim编译器Gcc
三、实验内容编写一段程序,使用系统调用创建两个子进程,当此程序运行时,在系统中有一1fork个父进程和两个子进程活动让每一个进程在屏幕上显示“身份信息”父进程显示uParent;子进程显示多运行几次,process!PID=xxxl PPID=xxx2”“Childx process!PID=xxx PPID=xxx”观察记录屏幕上的显示结果,并分析原因说明为进程号,用函数可获取进程号;xxxl getpid为父进程号,用函数可获取父进程号;xxx2getppid中为和用来区别两个子进程;Childx x12,函数用来避免父进程在子进程终止之前终止wait程序源码#includestdio.h#includeunistd.h#includestdlib.h#define NUM2int mainvoidpid_t pidl,pid2;ifpidl=fork0{创建进程失败printf1}else{ifpidl==O{//子进程执行1printfMChildl process:;printfnPID=%d PPID=%d\nn,getpid,getppid;sleep2;}else{ifpid2=fork0{创建进程失败printf2}else{〃子进程执行ifpid2==0{2printfnChild2process:;printfHPID=%d PPID=%d\nH,getpid,getppid;else{〃父进程执行wait;wait;printfParent process:;printfnPID=%d PPID=%d\nH,getpid,getppid;exitO;执行结果whtcmiss@whtcmiss-VirtualBox/Desktop$gcc testl.c-o testwhtcmiss@whtcmiss-VirtualBox/Desktop$./testChild2process:PID=2527PPID=2525Childl process:PID=2526PPID=2525Parent process:PID=2525PPID=2127whtcmiss@whtcmiss-VirtualBox/Desktop$./testChild2process:PID=2530PPID=2528Childl process:PID=2529PPID=2528Parent process:PID=2528PPID=2127whtcmiss@whtcmiss-VirtualBox/Desktop$./testChild2process:PID=2533PPID=2531Child1process:PID=2532PPID=2531Parent process:PID=2531PPID=2127实验结果分析第一次程序运行结果,两个子进程的都是是由同一个进程创建而父进程PPID2525,PID是父进程是说明父进程也是一系统进程的子进程2525,PPID2127,第二次程序运行结果,父进程是是说明父进程是由同一进程创建的,PID2528,PPID2127,父进程也是以子进程的方式存在,且进程是逐渐递增的ID和系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的2fork exec程序改造成可并发执行个进程的程序;并用命令获取程序的执行single.c3multi_process.c time时间,比较单进程和多进程运行时间,并分析原因//single.c#include stdio.h#define NUM5int mainvoidvoid print_msgchar*m;print_msgnGood”;print_msgnMoming;print_msgn007\nn;〃将007替换为本人学号return0;voidprint_msgchar*mint i;fori=0;iNUM;i++{printfn%sH,m;fflushstdout;sleepl;编译运行方法#gcc single.c-o single#time./single单线程执行结果:whtcmiss@whtcmiss-VirtualBox:~/Desktop$gcc single.c・o singlewhtcmiss@whtcmiss-VirtualBox:~/Desktop$time./singleGood Good GoodGoodGood Morning Morning MorningMorningMorning201300824419201300824419201300824419201300824419201300824419real0m
15.010suser0m
0.001ssys0m
0.002swhtcmiss@whtcmiss-VirtualBox:~/Desktop$|多线程代码#multi_process.c#include stdio.h#includeunistd.h#includestdlib.h#define NUM5int mainvoidpid.t pid
[3];int i;fori=l;i=3;i++{pid[i-l]=fork;ifpid[i-1]==O||pid[i-1]==-1break;}ifpid[O]=O{execlprint”Jprint”,“Good”,NULL;else{ifpid[l]=O{execlC^rinf/prinfVHello^NULL;else{ifpid
[2]=0{execl”print\print”J201300814113,NULL;wait;wait;wait;exit0;}}return0;whtcmiss@whtcmiss-VirtualBox:-/Desktops time•/single201300824419HelloGood201300824419HelloGood201300824419HelloGoodGoodHello201300824419201300824419HelloGoodreal0m5005suser0m000Ossys OmQeOOOs实验分析第二个实验结果,第二个程序的多线程因为是并发执行,而且是有三个线程,所以在时间上几乎是单线程的而且因为是并发的,所以打印结果是无序的1/3,实验总结本次实验首先要明确进程和程序的区别,我通过在操作系统的进程创建和终止操作,Linux运行父进程和子进程,查看运行结果和进程状态的变化实验过程中也了解了父进程与子进程的运行过程及其机制。
个人认证
优秀文档
获得点赞 0