欢迎来到天天文库
浏览记录
ID:23143503
大小:89.00 KB
页数:5页
时间:2018-11-04
《实验一-进程控制实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一进程控制一、实验目的:加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。二、实验平台:虚拟机:VMWare9以上操作系统:Ubuntu12.04以上编辑器:Gedit
2、Vim编译器:Gcc三、实验内容:(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parentp
3、rocess!PID=xxx1PPID=xxx2”;子进程显示“Childxprocess!PID=xxxPPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。说明:xxx1为进程号,用getpid()函数可获取进程号;xxx2为父进程号,用getppid()函数可获取父进程号;Childx中x为1和2,用来区别两个子进程;wait()函数用来避免父进程在子进程终止之前终止。程序源码:#include#include#include4、h>#defineNUM2intmain(void){pid_tpid1,pid2;if((pid1=fork())<0){printf("创建进程1失败");}else{if(pid1==0){//子进程1执行printf("Child1process:");printf("PID=%dPPID=%d",getpid(),getppid());sleep(2);}else{if((pid2=fork())<0){printf("创建进程2失败");}else{if(pid2==0){//子进程25、执行printf("Child2process:");printf("PID=%dPPID=%d",getpid(),getppid());}else{//父进程执行wait();wait();printf("Parentprocess:");printf("PID=%dPPID=%d",getpid(),getppid());exit(0);}}}}}执行结果whtcmiss@whtcmiss-VirtualBox:~/Desktop$gcctest1.c-otestwhtcmiss@wht6、cmiss-VirtualBox:~/Desktop$./testChild2process:PID=2527PPID=2525Child1process:PID=2526PPID=2525Parentprocess:PID=2525PPID=2127whtcmiss@whtcmiss-VirtualBox:~/Desktop$./testChild2process:PID=2530PPID=2528Child1process:PID=2529PPID=2528Parentprocess:PID=257、28PPID=2127whtcmiss@whtcmiss-VirtualBox:~/Desktop$./testChild2process:PID=2533PPID=2531Child1process:PID=2532PPID=2531Parentprocess:PID=2531PPID=2127实验结果分析:第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。第二次程序运行结果,父进程PID是8、2528,PPID是2127,说明父进程是由同一进程创建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执行时间,比较单进程和多进程运行时间,并分析原因。//single.c#include#defineNUM5intmain(void){voidprint_msg(char9、*m);print_msg("Good");print_msg("Morning");print_msg("007");//将007替换为本人学号return0;}voidprint_msg(char*m){inti;for(i=0;i
4、h>#defineNUM2intmain(void){pid_tpid1,pid2;if((pid1=fork())<0){printf("创建进程1失败");}else{if(pid1==0){//子进程1执行printf("Child1process:");printf("PID=%dPPID=%d",getpid(),getppid());sleep(2);}else{if((pid2=fork())<0){printf("创建进程2失败");}else{if(pid2==0){//子进程2
5、执行printf("Child2process:");printf("PID=%dPPID=%d",getpid(),getppid());}else{//父进程执行wait();wait();printf("Parentprocess:");printf("PID=%dPPID=%d",getpid(),getppid());exit(0);}}}}}执行结果whtcmiss@whtcmiss-VirtualBox:~/Desktop$gcctest1.c-otestwhtcmiss@wht
6、cmiss-VirtualBox:~/Desktop$./testChild2process:PID=2527PPID=2525Child1process:PID=2526PPID=2525Parentprocess:PID=2525PPID=2127whtcmiss@whtcmiss-VirtualBox:~/Desktop$./testChild2process:PID=2530PPID=2528Child1process:PID=2529PPID=2528Parentprocess:PID=25
7、28PPID=2127whtcmiss@whtcmiss-VirtualBox:~/Desktop$./testChild2process:PID=2533PPID=2531Child1process:PID=2532PPID=2531Parentprocess:PID=2531PPID=2127实验结果分析:第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。第二次程序运行结果,父进程PID是
8、2528,PPID是2127,说明父进程是由同一进程创建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执行时间,比较单进程和多进程运行时间,并分析原因。//single.c#include#defineNUM5intmain(void){voidprint_msg(char
9、*m);print_msg("Good");print_msg("Morning");print_msg("007");//将007替换为本人学号return0;}voidprint_msg(char*m){inti;for(i=0;i
此文档下载收益归作者所有