欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    使用fork创建进程.docx

    • 资源ID:50250       资源大小:74.19KB        全文页数:16页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    使用fork创建进程.docx

    使用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”对我们刚才编辑的代码进行保存退出第六步:输入“gccDel_Sleep.c-oDel_Sleep”命令运行代码的编译成可执行文件第七步:然后输入“./a.out”或者"./Del_Sleep"进行代码的运行,得到我们程序的运行结果实验三步骤:第一步:双击打开进入IinUX的终端,用Vi新建一个Three_Fork.c的文件第二步:创建成功之后,输入“a”或"o”或"i”进行插入编辑写入模式第三步:开始写我们的代码第四步:代码编辑完成之后,按“Esc”间退出编辑模式第五步:输入“:wq”对我们刚才编辑的代码进行保存退出第六步:输入“gccThree_Fork.c-oThree_Fork,命令运行代码的编译成可执行文件第七步:然后输入“/a.out”或者”./Three_Fork"进行代码的运行,这时候就可以得到我们程序的结果实验四步骤:第一步:双击打开进入IirIUX的终端,用Vi新建一个two_before.c的文件第二步:创建成功之后,输入“a”或"o”或"i”进行插入编辑写入模式第三步:开始写我们的代码第四步:代码编辑完成之后,按“Esc”间退出编辑模式第五步:输入“:wq”对我们刚才编辑的代码进行保存退出第六步:输入“gcctwobefore.c-Otwo_before”命令运行代码的编译成可执行文件第七步:然后输入“./two_before>ou.tst"进行代码的运行,第八步:继续输入"catou.tst"这时候就可以查看我们程序的结果4 .实验过程(源代码、配置清单必须带注释)注释:源码中出现的定义Pid为进程号,PPid为父进程号,getppid为获取父进程id,getpid为获取子进程id,SleeP为睡眠时钟,fork函数为一次调用,返回两个值,子进程返回0,父进程返回子进程id标记,出错返回-1,exec函数把程序(保存在磁盘某个目录中的可执行文件)读入内存并执行,Exec函数不创建进程,而是用一个新的程序替换当前进程的代码段、数据段和堆栈。execve(,7binlszz,arg,NULL)为使用exec函数执行一个新的程序(binls)char*arg3=,7binls,-,NULL)为定义一个字符串数组,最后一个数组元素为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#编译:对中间文件xxi进行编译,生成ASCn的汇编语言文件XX.S©rootubuntu: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_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.oThree_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#./ThreeForkbeforeforkingThisischildprocess.pid=6946,ppid=6945Thisischildprocess.pid=6947fppid=6946Thisischildprocess.pid=6948,ppid=6947使用GDB调试C程序(quit退出调试)OCQroot(g>ubuntu:-/Rou文件(F)编辑(E)查看(V)终端Cr)用助(H)rootubuntu:-#cdRourootubuntu:-/Rou#gcc-gThreeFork.c-oThreeForkrootQubuntu:/Rou#gdb-qThreeForkReadingsymbolsfromrootRouThreeFork.done.(gdb)2Exec函数的使用题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;)0Qrootubuntu:*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-x1rootroot4845Oct1401: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-1rootroot885Oct1418: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.cfr'c,_1-cc+IUAGCi14crr+-一-3Fork函数的使用题2:去掉sleep源码Orootubuntu:*Rou文件(F)ttWE)fifl(V)终翻T)WSI(H)Itinclude<systypes.h>main(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)ficlude<sinclude<unistd.h>winclude<systypes.h>intmain(intargc,char*argv)pidtpid;printf(.);p

    注意事项

    本文(使用fork创建进程.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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

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

    收起
    展开