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

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

ID:48439761

大小:117.40 KB

页数:5页

时间:2020-01-28

实验一进程创建  Linux实验报告.doc_第1页
实验一进程创建  Linux实验报告.doc_第2页
实验一进程创建  Linux实验报告.doc_第3页
实验一进程创建  Linux实验报告.doc_第4页
实验一进程创建  Linux实验报告.doc_第5页
资源描述:

《实验一进程创建 Linux实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一进程创建【实验目的和要求】1、1.了解进程的概念及意义;2.了解子进程和父进程;3.掌握创建进程的方法。【实验内容】1、1.子进程和父进程的创建;  2.编写附件中的程序实例;  3.撰写实验报告。【实验原理】1、原型:#includepid_tfork(void);在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork函数创建子进程的过程为:使用fork函数得到的子进程是父进程的一个复制品,它从父进程继承了进程的地址空间

2、,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端,而子进程所独有的只有它的进程号、资源使用和计时器等。通过这种复制方式创建出子进程后,原有进程和子进程都从函数fork返回,各自继续往下运行,但是原进程的fork返回值与子进程的fork返回值不同,在原进程中,fork返回子进程的pid,而在子进程中,fork返回0,如果fork返回负值,表示创建子进程失败。子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。例如,

3、子进程获得父进程数据空间、堆和栈的副本。注意,这是子进程所有用的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。2、原型:#includepid_tvfork(void);vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork函数用于创建一个新进程,而该进程的目的是exec一个新程序。vfork不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,它在父进程的空间中运行。vfork保证子进程先运行,在它调用exit之后父进程才可能

4、被调度运行,当子进程调用这两个函数中的任意一个时,父进程会恢复运行。【程序代码】1、1_fork.c#include#include#includeintvar=10;intmain(intargc,char*argv[]){pid_tpid;intnum=9;pid=fork();if(pid<0)//fork函数创建进程失败!{perror("fork");}if(pid==0)//子进程{var++;num++;printf("insonproce

5、ssvar=%d,num=%d",var,num);}else//父进程{sleep(1);printf("infatherprocessvar=%d,num=%d",var,num);}printf("commoncodearea");return0;}2、2_vfork.c#include#include#includeintvar=10;intmain(intargc,char*argv[]){pid_tpid;intnum=9;pid

6、=vfork();//创建进程if(pid<0){perror("vfork");}if(pid==0){var++;num++;printf("insonprocessvar=%d,num=%d",var,num);_exit(0);}else{printf("infatherprocessvar=%d,num=%d",var,num);}return0;}【实验步骤】一、1、打开终端,输入命令gedit1_fork.c,在1_fork.c文件中输入1_fork.bmp中的代码;2、输入命令gcc1_

7、fork.c-o1_fork,回车后显示无错误;3、输入命令:./1_fork运行程序。二、1、打开终端,输入命令gedit2_vfork.c,在2_vfork.c文件中输入2_vfork.bmp中的代码;2、输入命令gcc2_vfork.c-o2_vfork,回车后显示无错误:3、输入命令:./2_vfork运行程序。【实验结果】1、从上面可以看到两次的运行结果不一样。我们知道write函数是不带缓存的。因为在fork之前调用write,所以其数据写到标准输出一次。但是,标准I/O库是带缓存的。如果标准输出连

8、到终端设备,则它是行缓存的,否则它是全缓存的。当以交互方式运行该程序时,只得到printf输出的行一次,其原因是标准输出缓存由新行符刷新。但是当将标准输出重新定向到一个文件时,却得到printf输出行两次。其原因是,在fork之前调用了printf一次,当调用fork时,该行数据仍在缓存中,然后在父进程数据空间复制到子进程中时,该缓存数据也被复制到子进程中。于是那时父、子进程各自有了带

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。