实验一进程创建 Linux实验报告.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

《软件工程》教学辅导3——需求分析

实验一进程创建

【实验目的和要求】

1、1.了解进程的概念及意义;

2.了解子进程和父进程;

3.掌握创建进程的方法。

【实验内容】

1、1.子进程和父进程的创建;

2.编写附件中的程序实例;

3.撰写实验报告。

【实验原理】

1、原型:

#includeunistd.h

pid_tfork(void);

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为

子进程,而原进程为父进程。fork函数创建子进程的过程为:使用fork函数得到的子进程

是父进程的一个复制品,它从父进程继承了进程的地址空间,包括进程上下文、进程堆栈、

内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根

目录、资源限制、控制终端,而子进程所独有的只有它的进程号、资源使用和计时器等。通

过这种复制方式创建出子进程后,原有进程和子进程都从函数fork返回,各自继续往下运

行,但是原进程的fork返回值与子进程的fork返回值不同,在原进程中,fork返回子进程

的pid,而在子进程中,fork返回0,如果fork返回负值,表示创建子进程失败。

子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。例如,子进

程获得父进程数据空间、堆和栈的副本。注意,这是子进程所有用的副本。父进程和子进程

并不共享这些存储空间部分。父进程和子进程共享正文段。

2、原型:

#includeunistd.h

pid_tvfork(void);

vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork函数用于创建一

个新进程,而该进程的目的是exec一个新程序。vfork不将父进程的地址空间完全复制到子

进程中,因为子进程会立即调用exec,它在父进程的空间中运行。vfork保证子进程先运行,

在它调用exit之后父进程才可能被调度运行,当子进程调用这两个函数中的任意一个时,父

进程会恢复运行。

【程序代码】

1、1_fork.c

常用软件课程设计

《软件工程》教学辅导3——需求分析

#includestdio.h

#includestdlib.h

#includeunistd.h

intvar=10;

intmain(intargc,char*argv[])

{

pid_tpid;

intnum=9;

pid=fork();

if(pid0)//fork函数创建进程失败!

{

}

if(pid==0)//子进程

{

var++;

num++;

}

else//父进程

{

sleep(1);

}

return0;

}

2、2_vfork.c

#includestdio.h

#includestdlib.h

常用软件课程设计

《软件工程》教学辅导3——需求分析

#includeunistd.h

intvar=10;

intmain(intargc,char*argv[])

{

pid_tpid;

intnum=9;

pid=vfork();//创建进程

if(pid0)

{

}

if(pid==0)

{

var++;

num++;

_exit(0);

}

else

{

}

return0;

}

【实验步骤】

一、

1、打开终端,输入命令gedit1_fork.c,在1_fork.c文件中输入1_fork.bmp中的

代码;

2、输入命令gcc1_fork.c-o1_fork,回车后

文档评论(0)

180****8094 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档