




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验内容:进程管理一、 实验目的1、 掌握Linux中进程的创建方法及执行情况;2、 加深对进程、进程树等概念的理解;3、掌握Linux中如何加载子进程自己的程序;4、掌握父进程通过创建子进程完成某项任务的方法;5.、掌握系统调用exit()和_exit()调用的使用。6、分析进程竞争资源的现象,学习解决进程互斥的方法;进一步认识并发执行的实质二、 实验内容(一)进程的创建1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。#include<stdio.h&
2、gt;main() int p,x; p=fork(); if(p>0) x=fork(); if(x>0) printf("fathern"); else printf("child2"); else printf("child1");输出结果:child1child2father2、运行以下程序,分析程序执行过程中产生的进程情况。#include <stdio.h>main() int p,x; p=fork(); if
3、(p>0) fork(); else fork(); fork(); sleep(15); 实验步骤:编译连接 gcc o forktree forktree.c后台运行 ./forktree &使用 pstree
4、 h 查看进程树运行结果: gnome-terminalbashforktreeforktreeforktreeforktree
5、; forktree forktree&
6、#160; pstree分析:程序运行,系统首先创建一个进程forktree,执行到p=fork()创建一个子进程forktree,子进程获得处理机优先执行,父进程等待;执行else,当执行到第一个fork()函数时,子进程创建了一个进程forktree,称之为孙进程,孙进程获得处理机往下
7、执行,子进程等待;执行到第二个fork()函数时,孙进程又创建一个进程forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个fork()函数,又创建一个进程forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程P>0执行if语句,运行fork()函数,又创建一个进程forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行sleep(15)语句,休眠15秒,用pstree命令查
8、询进程树。3、运行程序,分析运行结果。#include <stdio.h>main() int p,x,ppid,pid; x=0; p=fork(); if(p>0) printf("parent output x=%dn",+x); ppid=getpid();
9、160; printf("Thi id number of parent is:ppid=%dn",ppid); else printf("child output x=%dn",+x); pid=getpid();
10、60; printf("Thi id number of child is:pid=%dn",pid); 运行结果:Parent output x=1This id number of parent is:ppid=3110Child output x =1This is number of
11、160;child is:pid=3111分析:fork创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以,两个进程中的数据互不影响都是1。4、loop.c#include <stdio.h>main() while(1) ;实验步骤:编译 gcc loop.c o loop后台运行 ./loop &(可多次使用该命令)多次使用ps命令查看进程状态结果:F S UID
12、; PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 1000 2645 2643 0 80
13、160;0 - 1444 wait pts/0 00:00:00 bash0 R 1000 3622 2645 78 80 0 - 403 -
14、; pts/0 00:00:18 loop0 R 1000 3627 2645 39 80 0 - 403 - pts/0 0
15、0:00:02 loop0 R 1000 3628 2645 39 80 0 - 403 - pts/0 00:00:01 loop0 R 1000
16、160; 3630 2645 0 80 0 - 625 - pts/0 00:00:00 ps(二)进程控制1、设计一程序,父进程创建一子进程,子进程的功能是输出“hello world!”,使用execl()加载子进程的程序。程序代码如下
17、:execl.c程序:#include<stdio.h>#include<stdlib.h>#include<unistd.h>main()int p;p=fork();if(p>0) printf("father is running!n");else printf("child is running!n"); execl("./hello","hello",0);printf("child is running!n");hello.c程序:#incl
18、ude<stdio.h>main() printf("hello world!n");输出结果:child is running!hello world!father is running!2、运行以下程序,分析程序执行结果。#include<stdlib.h>#include <stdio.h>main() int p; p=fork(); if (p>0) printf(&qu
19、ot;this is parent "); else printf("this is child firstn”); printf("this is child second ”); _exit(0);
20、 执行结果:this is child firstthis is parentchunRedFlagLinux jjz$换为exit(0)的执行结果:this is child firstthis is child second this is parentchunRedFlagLinux jjz$分析:_exit()只是返回进程状态SZOMB,不清除缓冲区内容; exit(0)表示进程正常终止;(三)、进程的互斥1、利用cat to_be_locked.txt
21、 查看下面程序的输出结果。#include<stdio.h>#include<unistd.h>main()int p1,p2,i;int *fp;fp=fopen("to_be_locked.txt","w+");if(fp=NULL)printf("Fail to create file");exit(-1);while(p1=fork()=-1);/*创建子进程p1*/if(p1=0)lockf(*fp,1,0);/*加锁*/for(i=0;i<10;i+) fprintf(fp,&quo
22、t;daughter%dn",i);lockf(*fp,0,0);/*解锁*/elsewhile(p2=fork()=-1); /*创建子进程p2*/if(p2=0)lockf(*fp,1,0); /*加锁*/for(i=0;i<10;i+) fprintf(fp,"son%dn",i);lockf(*fp,0,0); /*解锁*/elsewait(NULL);lockf(*fp,1,0); /*加锁*/for(i=0;i<10;i+) fprintf(fp,"parent%dn",i);lockf(*fp,0,0); /*解锁*/
23、fclose(fp);执行结果:daughter0daughter1daughter2daughter3daughter4daughter5daughter6daughter7daughter8daughter9son0son1son2son3son4son5son6son7son8son9parent0parent1parent2parent3parent4parent5parent6parent7parent8parent9分析:程序开始定义了文件读写指针用于打开指定的文件,当文件不存在时则自动创建。然后有创建了一个进程p1,p1获得处理机执行,给文件读写指针加锁,这样,即使p1失去处理机
24、,其他获得处理机的进程也无法访问文件指针指向的文件,当p1再次获得处理机后继续执行直至进程p1结束并解锁;p1结束后父进程获得处理机执行又创建了进程p2,p2获得处理机执行,也给文件指针加锁,同理直至p2运行完解锁;p2结束后父进程获得处理机,父进程也给文件指针加锁,直至父进程执行完毕解锁,程序结束。2、按以下步骤分析下面的程序:(1)查看程序执行的结果并估计程序执行所需要时间。(2)将程序中所有的lockf函数加上注释,再观察程序执行的结果和估算程序执行所需的时间。(3)分析这两次执行的结果与时间的区别。#include <stdio.h>#include &
25、lt;unistd.h>main( ) int p1,p2,i; p1=fork( ); /*创建子进程p1*/ if (p1=0) lockf(1,1,0); /*加锁,这里第一个参数为stdout(标准输出设备的描述符)*/ &
26、#160; for(i=0;i<10;i+) printf("child1=%dn",i); sleep(1); lockf(1,0,0);
27、; /*解锁*/ else p2=fork(); /*创建子进程p2*/
28、0;if (p2=0) lockf(1,1,0); /*加锁*/ for(i=0;i<10;i+)
29、printf("child2= %dn",i); sleep(1); lockf(1,0,0); /*解锁*/
30、; else lockf(1,1,0); /*加锁*/ for(i=0;i<10;i+)
31、; printf(" parent %dn",i); sleep(1);
32、 lockf(1,0,0); /*解锁*/ 未加注释的执行结果:child1=0child1=1child1=2child1=3child1=4child1=5child1=6child1=7child1=8child1=9child2=0child2=1child2=2child2=3child2=4child2=5child2=6child2=7child2=8child2=9parent0parent1parent2parent3parent4parent5parent6parent7parent8parent9加上注释的执行结果:child1=0child2=0parent0child1=1child2=1parent1child1=2child2=2parent2chi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁德师范学院《高级朝鲜语三》2023-2024学年第二学期期末试卷
- 高层建筑施工安全评估与隐患排查整改合同
- 京东数码产品营销策略研究与执行合同
- 集美语文面试真题及答案
- 高等教育质量评估体系构建课件
- 《齿轮传动》课件2
- 《广告策划与消费者行为》课件
- 煤矿工程技术员培训课件
- 《色彩搭配技巧》课件
- 《刺青护理指南》课件
- 中级宏观经济学知到课后答案智慧树章节测试答案2025年春浙江大学
- 智慧树知到《形势与政策(北京大学)》2025春期末答案
- 绿化工程施工专项施工方案
- 甘肃省历年中考语文古诗欣赏试题汇编(2003-2023)
- 1.2区域整体性和关联性-以青田县稻鱼共生为例课件-高中地理人教版(2019)选择性必修2
- “5领导作用-5.1领导作用和承诺”专业深度解读与应用指导材料(雷泽佳编制-2025C0)
- 免疫组库临床应用
- 新版人教版一年级数学下册第五单元100以内的笔算加减法
- 2024届高考生物一轮复习必考重点大全宝典
- 《延续性护理在永久性肠造口患者中的应用研究》4600字(论文)
- 戒毒所运动康复
评论
0/150
提交评论