- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验2进程控制
操作系统实验报告
实验题目:Linux进程的创建
专 业 信息与计算科学
学 生 姓 名 彭颖涵
班 级 学 号 B130801081
指 导 教 师 叶宁
指 导 单 位 计算机学院 软件教研室
日 期
教师评语
教师签名:
年 月 日 成绩评定 备 注 实验目的
了解进程与程序的区别,加深对进程概念的理解。
掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串行执行。
了解fork()系统调用的返回值,掌握用fork()创建进程的方法。
熟悉wait,exit等系统调用。
实验内容
编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“parent”,儿子进程执行时屏幕执行“son”,女儿进程执行时屏幕显示”daughter”。
多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。
修改程序,在父、子进程中分别使用wait,exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。
三、实验指导
Linux中与进程控制相关的几个主要系统调用
名/格式/参数 功??能 返回值的解释 fork( )、vfork( ) 创建一个字进程 对父进程:返回子进程号
对子进程:返回0
错误:返回-1 #include unistd.h
execve(char *file,char **argv,char **envp) 用指定程序覆盖当前程序代码 正确:0
错误:-1 #include sys/types.h
#include sys/wait.h
pid_t wait(int *statloc) 等待进程终止 正确:子进程的ID
错误:-1 getpid( )、getppid( ) 获得进程号 #include stdio.h
void exit(int status) 进程正常结束
四、实验步骤(附程序原码)
parent.c
#includestdio.h
main()
{
int p1,p2,i;
while((p1=fork())==-1); /*创建子进程p1*/
if(p1==0)
for(i=0;i4;i++)
printf(daughter %d\n,i);
else
{
while((p2=fork())==-1); /*创建子进程p2*/
if(p2==0)
for(i=0;i4;i++)
printf(son %d\n,i);
else
for(i=0;i4;i++)
printf(parent %d\n,i);
}
}
son.c
#includestdio.h
#includestdlib.h
main()
{
int pid;
pid=fork();/*创建子进程*/
switch(pid)
{
case -1:
printf(fork fail!\n); /*创建失败*/
exit(1);
case 0: /*子进程*/
printf(subprocess!\n);
exit(0);
default: /*父进程*/
wait(0); /*同步*/
printf(completed !\n);
exit(0);
}
}
五、运行结果及其结果分析
c@ubuntu:~$ gcc -o abc parent.c
c@ubuntu:~$ ./abc
parent 0
parent 1
parent 2
parent 3
c@ubuntu:~$ son 0
son 1
son 2
son 3
daughter 0
daughter 1
daughter 2
daughter 3
c@ubuntu:~$ gcc -o abcd son.c
c@ubuntu:~$ ./abcd
subprocess!
completed !
fork()返回值意义如
文档评论(0)