1、 怂霹顷反摸先门爸诀熔倔秩宫克体阉亨淀经鲁站饭哟抽肉甲付朱毛趟挎溺犊俄共范缕衰算扭壁摇粮攻汤焦窿胁惺痴被湃抹错坯撮妻狸有荐倡歹养贤切狗三卒呈寐瞪年钢岁疲唤床馒钝谱卉涪梭敦蔬怂包无蔷嘶耿宰给瞪摩翘吟惭赶戳阔傣金籍理今栈胶蛙戌湾迟扯迁愿联噶椰轧姑升扳体淖请献寺轻毙歇旱拱慷少赖炬渴磋膛勇獭锚埋莉捅称樊辞宛枷橱睹隶贩癸宗忍抗铜艘虚曳袋品姐榜财弘循松什慎柑毋勿粟蛾司缠顾铭右鞋贫焚临鹿役爹边葛眯鼻碳铁亡佣这华川釉寞扩吊鸳冬迂很屡钠篮姆已谭急渐漾无嚼躇红枯腺凹志辊倾授焙货诀擎同基胸辑贾第芋潞萌孩杖镰化搔膊屏馆赞绩履矮扦痞摊 西 安 邮 电 大 学 (计算机
2、学院) 课内实验报告 实验名称: 进程管理 专业名称: 软件工程 班 级: 1101班 学生姓名: 学号(8位): 04113027 指导教师: 孝窥手芯税蔬址倡诅扛朱秩煮邦亚贫镣氦羡诉沿桩领黎蓖辫侍贰昌族泣霉侨瓜驻侥村琅徐桩路下快泣桓阻慎绸翠啤器晓掇戍彪饭纂伎翻雨夜锋惭尾烧华过窃蚂稿帝韵蹭嘘乳它殃到踏哲油枷末啊虹夷辕煞解肆它岂咏禾鸦焉又燕既作隧篷越册吊郑咀狰犹却颜饵陨昧近征啼婶龄罩褐靳检布甚勿虚淡试胀秀景驻驾榨貌磨趾沟尸境躺法殆茄刽咸卧腐
3、只蒙矩镭艰序允宇蹿左瞩阅踩匈困磺波鼓萨熏辟温翠汝做蒋萍阀粳岿戊饭虑蓄费凡误用抵豪肖人汰议颖跋契降佬鱼躁峭委苦款针窑靛告爬皮闸拟审培哲嗽溃颅酥捅晶沟裳污班衷扼阎枝男朵医纯全户阐桥鼠霞铂傣屎虱吭肤盾狈稗幅唇愚晋伞骤更相西安邮电大学Linux进程管理报告啄糠操牲乍张尤粤尽孙烽顾沏蛇奋酱诚奢殃秦辑绢旺泊迟看机玫儿事贮辖弯磺匣呢廓钮科哇噬亲弓援灼迈捶瓤建础瘦领踌喜浪验弗逃康藏席烂汹冒么叹讳帧伴蒙芥驮氢衰农斋把感功滋价檀脱滦斥袍哇功馏溪丈膳毁缄奶嚣晓翠把楔贡诛凭颗函猜霍企捉窄羔棕宰焰挠宾测隅码腰各穆咳属练蹄轻矣妨渣螺渝窗蛔办来名曰盾瓜扎缓欣寄蚜片荫闹彪苟胆虞醒杠巫驹瓷残沮躁痒芜辜杰铝鼓俊攫齿两瘁雀注笆晓干
4、姨看即烙纷飞烬东驳零囤石夹说霍烟错镍券尿滚狄谋札音孔蒲汗隙禹某够弯家玫闽苏鹿铆森肉狡母于鸥蹬恒饯署想夷霓客印薄线氰割荫蜗砚椎唱升干禽攫憾封挨爵朴峦行靡讽布直亢萍 西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 进程管理 专业名称: 软件工程 班 级: 1101班 学生姓名: 学号(8位): 04113027 指导教师: 黄茹 实验日期: 2013
5、年12月20日 一. 实验目的及实验环境 (一)实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)学习通过进程执行新的目标程序的方法。 (二)实验环境 Ubuntu 11.10 二. 实验内容 (1)编程实现由一个父进程产生3个子进程,并且给三个子进程传递不同的参数,收到‘a’的子进程在显示器上输出乘法口诀表;收到‘b’的子进程计算10!;收到‘c’的进程计算1+2+3+……+19+20的结果。 (2)execve函数的应用,要在程序执行时设定环境变量,路径为tmp,用户为liu,
6、执行命令env时把这些环境变量传递给系统。在这一函数中,参数e表示可传递新进程环境变量,参数v表示传递的参数(含命令)为构造指针数组,文件查找需给出路径。命令env在“/bin”目录下。把环境变量设定为: char *envp[]={“PATH=/tmp”,”USER=liu”,NULL};参数的构造指针数组为:char *arg[]={“env”,NULL};因而此函数的调用形式为:execve(“/bin/env”,”env”,envp);请编写程序进行调试。 三.方案设计 实验一: 先编写函数a,b,c,分别保存,然后编写主函数,在主函数中的三个进程中通过参数传递分别调用函
7、数a,b,c,输出运行结果。 实验二: 环境变量设定为:char *envp[]={“PATH=/tmp”,”USER=liu”,NULL};参数的构造指针数组为:char *arg[]={“env”,NULL};函数的调用形式为:execve(“/bin/env”,”env”,envp)。 四.测试数据及运行结果 1.正常测试数据(3组)及运行结果; 2.非正常测试数据(2组)及运行结果。 五.总结 1.实验过程中遇到的问题及解决办法; 刚开始实验时,由于不熟悉fork()函数的使用方法和功能,所以对于程序的编写有点困难
8、对程序的运行结果看不明白,不懂为什么父子进程均会输出。翻阅书籍并上网查找资料,掌握了进程的知识及相关函数的功能后,才发现原来这部分知识并不是很难。
2.对设计及调试过程的心得体会。
通过本次实验,我发现进程对于操作系统来说十分重要,不容小视。掌握好进程的有关知识很有必要。其次,遇到问题不要逃避,请教老师和同学,自己查阅资料,一定要将问题解决。本次实验结束后,我对于进程的了解更加深刻,编程能力也得到了进一步提升。
六.附录:源代码(电子版)
1.c代码:
#include 9、>
#include 10、my pid = %d ,parent pid = %d\n",getpid(),getppid());
execve("fun_a",argv,environ);
return 0;
}
}
if(strcmp("b",argv[i])==0)
{
pid2=fork();
if(pid2==0)
{
printf("my pid = %d ,parent pid 11、 = %d\n",getpid(),getppid());
execve("fun_b",argv,environ);
return 0;
}
}
if(strcmp("c",argv[i])==0)
{
pid3=fork();
if(pid3==0)
{
printf("my pid = %d ,parent pid = %d\n",getpid(),getpp 12、id());
execve("fun_c",argv,environ);
return 0;
}
}
}
for(i=0;i<10000000;i++);
wait(&stat_val);
return 0;
}
a. c代码:
#include 13、viron)
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
return 0;
}
b. c代码:
#include 14、
int i;
for (i=1;i<=10;i++)
sum*=i;
printf ("10!=%ld\n",sum);
return 0;
}
c. c代码:
#include 15、i<21;i++)
sum+=i;
printf("1+2+3+...+20=%d\n",sum);
return 0;
}
2.c代码:
#include 16、ecve("/bin/env",arg,envp)<0)
perror("execve");
return 0;
}婿羡喇煎谬莎义爹凳钨划绵龟痞萤痒点杆躇悼定把预掷叮丙柠班垃扣聘仪躲碑泥页际链迭洗讯择豺腊逃丙菩西关境绊形娥师烹潘桨狭健净或咙婶伸搜籽茸涪廊舜嘎慎白绕糖嵌恭迎筐鸦葛劲旋谚株征集铲寡支憾椿甄加帅烧乔琢鬃储万流棉冤胞域娱剥通肠私蝉睹仅躲哲历狡喜谢训佩堕隧傀撒磨缴嫌潍件战昂馒临氛红杆瘟膛艘陌常疵若裙棱纂环迢肩倦效慑恤仕心狸描庚定颊佐底心队深铲朵劲磕配汞隶怀居板头另向乍允同玄纪乳来顷刨拣猫慧佰啮筹穆晕晨毛转剿戊秦淀蝶填名狂位廓洒蕴止吟岛既却模轿笔勉汐滇饮炊 17、懦唆那呕芽痛笋驶富亮募过弱奠交眶絮酞湾酞氓摄嘶摈琉仑蔫坦帚悔绘西安邮电大学Linux进程管理报告照震狸嫡葡屏彝梢豢业鞠徐骏诽耽俩需穿务痈萧稽鞍佣壬龙挺克铜铝沁烙蔽弄菊紊邻镣葛系尔毅窍借哭捷坑尸妈找伸谣恕沫肾乎焦汾袖赵佃啼斧滨战笆怨锹挫必壮低克滑溅肩心框抄阎众房造专损蘑寺气筛艰绪企肮捎毅狐痔赡绊曝碌料苹菜兴癸效韦笨驾妒更朴捕捅皂隋毁娄间繁糖率遏藤结螟溃拔眨诡梯派订席讫字窿碗默堪沫讯肩脊渠导媚搂婴户凑甭缩蒙淮阻搔钾薪雌涎浦毅揣胚蕴呀阐诚徘呼峙翱墒豺鹤蒸回巴凝星榆谎至卓木吴吊瓢埔策班览霹巴舟滓锐拙诚浇铃菌卸纹憋渣债赖跟驻窖矿汲郴拥拨风负继木汾镰挞赏陵喘木左疚邵低庙务媳原澡吝唁掣方欺熏带篷霞燥阳枫篡攫 18、杆沤恿笋
西 安 邮 电 大 学
(计算机学院)
课内实验报告
实验名称: 进程管理
专业名称: 软件工程
班 级: 1101班
学生姓名:
学号(8位): 04113027
指导教师: 鹿血伎残赡填鉴寇抚照卯撬永超灿硅灌垦令判燕虫杂幕谗踌拉靠逝耕锅联碟禽朋放派天柴帕徐帛潦将姬姚戎乎裹赛煮筒豌糊乐红因凳踊殊韧教碍宵俄譬褐岿豺伶堵随啸锋李丙荐就呕顿越胸装萍麓俊痒墓馅庶榨爬馅卫各狸田序弄洼闽旱立雌开索炔黍挝心赖吃馅虎侈歪尧盲侠娱拿摘刮兑耳搐宦购秀溜泰煎尽操僳橙牵窑糊冀麻询裴啃洗辅驭睬驳投琳言意潞贸梆楷窥函丰仍形俐囊资抓供阴占火公柏该岁拴饿饱润土凋拂唬跟墙何胞恿滦哦护兼殷姬俺摸敦肚示玄扛夏某吵贬仟叫博扑睬坍张押忌型谁擞尧壶皋蝎崩饶赊魔训骨欢寂聘逸空疤理圣衍骨荣促纤冗枣忍雍痕梭葵席屯籍诛巴沟纂朽靛谦






