使用fork创建进程.docx

上传人:王** 文档编号:50250 上传时间:2022-12-09 格式:DOCX 页数:16 大小:74.19KB
下载 相关 举报
使用fork创建进程.docx_第1页
第1页 / 共16页
使用fork创建进程.docx_第2页
第2页 / 共16页
使用fork创建进程.docx_第3页
第3页 / 共16页
使用fork创建进程.docx_第4页
第4页 / 共16页
使用fork创建进程.docx_第5页
第5页 / 共16页
使用fork创建进程.docx_第6页
第6页 / 共16页
使用fork创建进程.docx_第7页
第7页 / 共16页
使用fork创建进程.docx_第8页
第8页 / 共16页
使用fork创建进程.docx_第9页
第9页 / 共16页
使用fork创建进程.docx_第10页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《使用fork创建进程.docx》由会员分享,可在线阅读,更多相关《使用fork创建进程.docx(16页珍藏版)》请在优知文库上搜索。

1、使用fork创建进程L实验目的(1)理解LinUX实现系统调用的机制;(2)理解并掌握fork系统调用创建新进程的过程和原理;(3)掌握Vi(vim)、GCC和GDB的使用。2 .实验内容(1)通过编程验证fork函数的实现机制,并理解写时拷贝COW的意义;(2)使用fork和exec函数创建新进程。3 .实验方法(实验步骤)实验二步骤:第一步:双击打开进入IinUX的终端,用Vi新建一个Del_Sleep.C的文件第二步:创建成功之后,输入“a”或o”或i”进行插入编辑写入模式第三步:开始写我们的代码第四步:代码编辑完成之后,按“Esc”间退出编辑模式第五步:输入“:wq”对我们刚才编辑的代

2、码进行保存退出第六步:输入“gccDel_Sleep.c-oDel_Sleep”命令运行代码的编译成可执行文件第七步:然后输入“./a.out”或者./Del_Sleep进行代码的运行,得到我们程序的运行结果实验三步骤:第一步:双击打开进入IinUX的终端,用Vi新建一个Three_Fork.c的文件第二步:创建成功之后,输入“a”或o”或i”进行插入编辑写入模式第三步:开始写我们的代码第四步:代码编辑完成之后,按“Esc”间退出编辑模式第五步:输入“:wq”对我们刚才编辑的代码进行保存退出第六步:输入“gccThree_Fork.c-oThree_Fork,命令运行代码的编译成可执行文件第七

3、步:然后输入“/a.out”或者”./Three_Fork进行代码的运行,这时候就可以得到我们程序的结果实验四步骤:第一步:双击打开进入IirIUX的终端,用Vi新建一个two_before.c的文件第二步:创建成功之后,输入“a”或o”或i”进行插入编辑写入模式第三步:开始写我们的代码第四步:代码编辑完成之后,按“Esc”间退出编辑模式第五步:输入“:wq”对我们刚才编辑的代码进行保存退出第六步:输入“gcctwobefore.c-Otwo_before”命令运行代码的编译成可执行文件第七步:然后输入“./two_beforeou.tst进行代码的运行,第八步:继续输入catou.tst这时

4、候就可以查看我们程序的结果4 .实验过程(源代码、配置清单必须带注释)注释:源码中出现的定义Pid为进程号,PPid为父进程号,getppid为获取父进程id,getpid为获取子进程id,SleeP为睡眠时钟,fork函数为一次调用,返回两个值,子进程返回0,父进程返回子进程id标记,出错返回-1,exec函数把程序(保存在磁盘某个目录中的可执行文件)读入内存并执行,Exec函数不创建进程,而是用一个新的程序替换当前进程的代码段、数据段和堆栈。execve(,7binlszz,arg,NULL)为使用exec函数执行一个新的程序(binls)char*arg3=,7binls,-,NULL)

5、为定义一个字符串数组,最后一个数组元素为null1使用GCC调试C程序(预处理、编译、汇编、链接)预处理:对xx.c中的预处理命令进行处理,生成一个中间文件XX.iOrootubuntu:Rou文件(F)编辑(E)查看(V)线端(T)帮助(H)rootubuntu:#cdRourootubuntu:/Rou#IsThreeFork.*ThreeFork.crootubuntu:*/Rou#gccThreeFork.c-oThreeFork.iroottaubuntu:-/Rou#IsThreeFork.*ThreeFork.cThreeFork.iroot(Qubuntu:-/Rou#编译:对

6、中间文件xxi进行编译,生成ASCn的汇编语言文件XX.Srootubuntu:Rou文件(F)Si(E)Sfi(V)a(T)帮助(H)IrOOtiIbUntu:#cdRourootubuntu:/Rou#ISThreeFork.*IThreeFork.cThree_Fork.irootubuntu:/Rou#gccThreeFork.c-oThreeFork.srootubuntu:/Rou#LSThreeFork.*I程序“LS”尚未安装。您可以便用以下命令安装:apt-getinstallSlrootubuntu:-/Rou#IsThreeFork.*IThreeFork.cThree_

7、Fork.iThree_Fork.srootubuntu:/Rou#汇编:把汇编文件XX.S转换成可重定位的目标文件XX.OCQrootubuntu:-ZRou文件(F)媚辑(E)查看(V)帮助(H)rootubuntu:-#cdRouroottaubuntu:-/Rou#IsThreeFork.*ThreeFork.cThree_Fork.iThree_Fork.sroot(aubuntu:-/Rou#gccThreeFork.c-oThreeFork.oroot(aubuntu:-/Rou#IsThreeFork.*ThreeFork.cThreeFork.iThree_Fork.oThr

8、ee_Fork.srootubuntu:-/Rou#链接:把若干个可重定位的目标文件以及共享的库文件汇集成一个可执行的目标文件.root(g)ubuntu:Rou文件(F)编辑(E)Sfi(V)终端(T)帮助(H)rootubuntu:#cdRourootubuntu:-/Rou#IsThreeFork.*ThreeFork.cThreeFork.iThreeFork.oThreeFork.sroot(3ubuntu:-/Rou#gccThreeFork.c-oThreeForkrootubuntu:-/Rou#./ThreeForkbeforeforkingThisischildproces

9、s.pid=6946,ppid=6945Thisischildprocess.pid=6947fppid=6946Thisischildprocess.pid=6948,ppid=6947使用GDB调试C程序(quit退出调试)OCQroot(gubuntu:-/Rou文件(F)编辑(E)查看(V)终端Cr)用助(H)rootubuntu:-#cdRourootubuntu:-/Rou#gcc-gThreeFork.c-oThreeForkrootQubuntu:/Rou#gdb-qThreeForkReadingsymbolsfromrootRouThreeFork.done.(gdb)2E

10、xec函数的使用题1:使用exec函数执行一个新的程序(binls)源码0rootubuntu:-/Rou文由F)Htt(E)S(V)HiS(T)帮助(川#include-#include-#include*inmain(intargctchar*argv)pidtpid;int-i=;,getpid(),getppid(););char*arg=,printf(pid=fork();if(pid)(printf()elseif(pid=)printf(if(execve(printf(exit();elsesleep();printf(dn,getpid();)return;)0Qrootu

11、buntu:*Rou文件(F)SItt(E)fifi(V)tta)帮助(H)rootubuntu:/Rou#gccforkexec.crootubuntu:/Rou#./a.outiBeforeforking.Thisischildprocess.pid=6653,ppid=6652total96-rwxrw-rw-1rootroot1129Oct1322:042.c叩-rw-r-r-1rootroot761Oct1322:144.ci-rw-r-r-1rootroot805Oct1322:2944.c-rw-r-r-1rootroot2109Oct1322:3355.c-rwxr-xr-x1

12、rootroot4845Oct1401:44DelSleep-rwr-r-1rootroot395Oct1323:31DelSleep.c-rwr-r-1rootroot447Sep2900:01ExecTree.c-rwxr-xr-x1rootroot4955Oct1323:39ForkThree-rw-r-r-1rootroot439Oct1323:38FOrklThree.c-rw-r-r-1rootroot416Sep2900:17ForkThreeDeisleep.c-rw-r-r-1rootroot924Oct1401:37ThreeFork.c-nxrv-n-1rootroot8

13、85Oct1418:15ThreeforkTree.c-rwxr-xr-x1rootroot524Oct1418:55a.out-rwxrw-rw-1rootroot579Oct1418:55fork_exec.c-rw-r-r-1rootroot149Oct1401:40ou.tst-rw-r-r-1rootroot379Octl20:41pstreetest.c-rw-r-r-1rootroot91Octl21:36tree.cfrc,_1-cc+IUAGCi14crr+-一-3Fork函数的使用题2:去掉sleep源码Orootubuntu:*Rou文件(F)ttWE)fifl(V)终翻

14、T)WSI(H)Itincludemain(ntargc,char*argv)(pidtpid;printf(pid=fork();if(pid)();printf()elseif(pid=);printf()else,getpid(),getppid();printf()return;),getpid();Grootubuntu:*Rou文件(F)煽Ifl(E)杳看(V)终造(T)帮助(H)rootubuntu:#cdRourootubuntu:/Rou#gccDelSleep.c-oDelSleeproot(aubuntu:/Rou#./DelSleepbeforeforkingThisisparentprocess.pid=6631root0ubuntu:/Rou#Thisischildprocess.pid=6632,ppid=1题3:fork的三次调用源码rootubuntu:-/Rou文件(F)a(E)fi(v)()常助(H)ficludesincludewincludeintmain(intargc,char*argv)pidtpid;printf(.);p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > linux/Unix相关

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!