进程管理75142.doc

上传人:夏** 文档编号:544058151 上传时间:2023-07-08 格式:DOC 页数:4 大小:230.50KB
返回 下载 相关 举报
进程管理75142.doc_第1页
第1页 / 共4页
进程管理75142.doc_第2页
第2页 / 共4页
进程管理75142.doc_第3页
第3页 / 共4页
进程管理75142.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《进程管理75142.doc》由会员分享,可在线阅读,更多相关《进程管理75142.doc(4页珍藏版)》请在金锄头文库上搜索。

1、一、实验目的与要求:1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质3、掌握进程另外的创建方法4、熟悉进程的睡眠、同步、撤消等进程控制方法 二、实验环境:(硬件环境、软件环境) 1. LINUX操作系统和文本编辑器 三、实验内容:(原理、操作步骤等)1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示a,子进程分别显示字符b和字符c。试观察记录屏幕上的显示结果,并分析原因。1#include main( )int p1,p2;while(p1=fork( )= = -1);

2、/*创建子进程p1*/if (p1= =0) putchar(b); else while(p2=fork( )= = -1); /*创建子进程p2*/if(p2= =0) putchar(c); else putchar(a); 2、修改上述程序,每一个进程循环显示一句话。子进程显示daughter 及son ,父进程显示 parent ,观察结果,分析原因。#include main( )int p1,p2,i;while(p1=fork( )= = -1); /*创建子进程p1*/if (p1= =0) for(i=0;i10;i+)printf(daughter %dn,i);else

3、 while(p2=fork( )= = -1); /*创建子进程p2*/if(p2= =0) for(i=0;i10;i+) printf(son %dn,i);else for(i=0;i10;i+) printf(parent %dn,i);结果:分析原因:由于函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。但由于进程并发执行的调度顺序和父子进程抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。3. 用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容和利用wait( )来控制进程执行顺序

4、。#include#includemain( ) int pid; pid=fork( ); /*创建子进程*/switch(pid) case -1: /*创建失败*/ printf(fork fail!n); exit(1); case 0: /*子进程*/ execl(/bin/ls,ls,-1,-color,NULL); printf(exec fail!n); exit(1); default: /*父进程*/ wait(NULL); /*同步*/ printf(ls completed ! exit(0); 3、编写程序:用fork( )创建两个子进程,再用系统调用signal(

5、)让父进程捕捉键盘上来的中断信号(即按c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止代码:#include #include #include #includevoid waiting( ),stop( );int wait_mark;main( ) int p1,p2,stdout;while(p1=fork( )= =-1); /*创建子进程p1*/if (p10) while(p2=fork( )= =-1); /*创建子进程p2*/if(p20) wait_mark=1;signal(SIGINT,stop); /

6、*接收到c信号,转stop*/waiting( );kill(p1,16); /*向p1发软中断信号16*/kill(p2,17); /*向p2发软中断信号17*/wait(0); /*同步*/wait(0);printf(Parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop); /*接收到软中断信号17,转stop*/signal(sigint,sig_ign);waiting( );lockf(stdout,1,0);printf(Child process 2 is killed by parent!n)

7、;lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /signal(sigint,sig_ign); /*接收到软中断信号16,转stop*/waiting( );lockf(stdout,1,0);printf(Child process 1 is killed by parent!n);lockf(stdout,0,0);exit(0); void waiting( ) while(wait_mark!=0);void stop( )wait_mark=0;结果:屏幕上无反应,按下C后,显示 Parent process is killed!4、分析利用软中断通信实现进程同步的机理修改源程序得出正确的结果:在子进程的signal(16,stop);signal(17,stop)后加上 signal(SIGINT,SIG_IGN))四、实验体会通过这次试验,掌握了进程的概念,明确进程的含义,掌握进程另外的创建方法,熟悉了进程的睡眠、同步、撤消等进程控制方法。1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号