版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Linux操作系统设计实践》实验报告一学号:000000000姓名:***(组长)学院:数计学院专业:年级:09本组其它成员:学号姓名学号姓名学号姓名实验时间:2011-2012学年第一学期指导教师:《Linux操作系统设计实践》实验一:进程管理实验目的:加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质。学习通过进程执行新的目标程序的方法。了解Linux系统中进程信号处理的基本原理。实验环境:RedHatEnterpriseLinux5实验内容:实验一进程管理(1)进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”:子进程分别显示“b”和“c”。试观察记录屏幕上显示结果,并分析原因。#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0)putchar('b');else{while((p2=fork())==-1);if(p2==0)putchar('c');elseputchar('a');}return0;}显示结果:分析总共可能的结果有:1.子进程全部创建成功:bcabaccabcbaacbabc2.子进程一创建失败:b3.子进程二创建失败:bccb我的虚拟机上实验结果显示:bca分析原因:首先,根据fock()函数原理,fock()对于该语句之前的程序段只执行一次。此外,fock()对于该语句返回两次值,并针对两次返回值依次执行之后的语句,一般来说fock()是先进入子程序执行代码,再执行父进程代码。父进程与子进程的执行是相互独立的,相互之间没有任何时序上的关系。完全由操作系统的调度程序来决定进城的执行次序、速度。所以在没有加入进程同步机制(比如信号,信号量等)的代码的情况下,打印结果是随机出现的。在本程序中,对于子进程p1,p2和父进程,我使用的计算机操作系统令p1==0时,打印“b”,再让p2==0,打印“c”,最后打印“a”,结果显示为:bca由于在单机系统下很难出现因系统资源不足导致的进程创建失败,所以后三种情况很难调试出来,但是根据fock()的实现原理,理论上是完全可能出现的。(2)进程的控制1.修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行是屏幕上出现的现象,并分析其原因。#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0)printf("Child1isrunning!\n");else{while((p2=fork())==-1);if(p2==0)printf("Child2isrunning!\n");elseprintf("Fatherisrunning!\n");}return0;}显示结果:本程序是在第一题的源程序基础上直接编程字符串输出,与第一题相似,故输出结果和第一个实验现象一样,预测结果也有9种,这里就不一一例举了。我的虚拟机上实验结果显示为:Child1isrunning!Child2isrunning!Fatherisrunning!分析原因:本题的原理与第一小题相同,在本程序中,对于子进程p1,p2和父进程,我使用的计算机操作系统令p1==0时,打印:“Child1isrunning!”,再让p2==0,打印“Child2isrunning!”,最后打印“Fatherisrunning!”。2.使用exec函数族使子进程执行新的目标程序。#include<stdio.h>#include<unistd.h>intmain(){ printf("===systemcallexecltesting===\n"); execlp("date","date",0); printf("execerror!\n"); return0;}显示结果:我的虚拟机上实验结果显示为:===systemcallexecltesting===2011年10月29日星期六分析原因:exec函数使子进程执行新的目标程序。如果调用成功则执行另一个进程,与fock()最大的区别是一旦exec调用成功,就不执行原来进程后面的代码。即不会输出“execerror!”(3.)编写一段程序,使其实现进程的软中断通信[1]使用系统调用fork()创建两个子程序,再用系统调用signal()接收父进程从键盘上来的中断信号(即按Ctrl+c键);当有中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程有信号后分别输出ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!父进程等待两个子进程终止后,输出如下的信息后终止:ParentprocessisKilled!============================#include<stdio.h>#include<signal.h>intwait_mark;voidwaiting(){while(wait_mark==1);}voidstop(){wait_mark=0;}intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0){wait_mark=1;signal(SIGINT,SIG_IGN);signal(16,stop);waiting();printf("ChildProcess11isKilledbyParent!\n");exit(0);}else{while((p2=fork())==-1);if(p2==0){wait_mark=1;signal(SIGINT,SIG_IGN);signal(17,stop);waiting();printf("ChildProcess12isKilledbyParent!\n");exit(0);}else{wait_mark=1;signal(SIGINT,stop);waiting();kill(p1,16);kill(p2,17);wait(0);wait(0);printf("ParentProcessisKilled!\n");exit(0);}}}结果显示:我的虚拟机上实验结果显示:ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!ParentProcessisKilled!分析原因:首先对wait函数进行分析,进程一旦调用了wai,就立即阻塞
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度车牌租赁与车辆租赁市场推广合同2篇
- 2024年版夫妻双方协商离婚详细合同版B版
- 二零二五年度仓储设施资产评估及交易合同3篇
- 2025年度智慧社区综合管理平台安装与运营合同2篇
- 2025年度影视制作器材租赁合同规范3篇
- 2024智能法律咨询服务系统技术开发合同
- 呼伦贝尔2024年内蒙古扎赉诺尔区卫生健康委员会所属事业单位引进人才7人笔试历年典型考点(频考版试卷)附带答案详解
- 2025年度大豆产业链大数据分析与应用合同3篇
- 个人设备买卖合同例文(2024版)3篇
- 2025至2030年中国挂杆送衣车数据监测研究报告
- 四川省绵阳市高中2025届高三二诊模拟考试物理试卷含解析
- 合法退婚协议书模板电子版
- 三化一稳定严进严出专案报告
- 撂荒地整改协议书范本
- 2024年山东省潍坊市中考英语试卷(含答案逐题解析)
- GB/T 44133-2024智能电化学储能电站技术导则
- 尼日利亚变电站电气施工组织设计
- 关于退款协议书范文
- 决战期末全力以“复”课件-2023-2024学年高二下学期期末动员主题班会
- 《柴油加氢培训包》课件-9 柴油加氢设备-加氢反应器常见的损伤
- 电气维修施工方案
评论
0/150
提交评论