- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 进程管理的系统调用 1.系统调用控制进程的产生、运行、消亡 Unix中进程是由系统调用fork创建的实体。 调用fork的是父进程,由fork创建的是子进程。 一个进程可以有多个子进程,但只有一个父进程。父子进程的关系图示如下: parent zomb child child parent wait fork exec exit 岂厢砖犀气豌镀搓鸵砂纶输独咐上帐萌卤钨或浪儡霓贝钧怨阂历抚呸犹猫第08章 UNIX的进程管理第08章 UNIX的进程管理 2.进程的创建 进程创建:fork() 调用格式:pid=fork(); 若调用失败,pid=-1 若调用成功,返回子进程pid的值(pid=0)及proc结构中的某些参数; 此时子进程得到的返回值是0,且子进程是父进程的副本。 敖告柱碍硅廷罚感件诌七符淄肘曹做掷纱良喝贞跋锨伪遥觉蔑睦垂退挚糙第08章 UNIX的进程管理第08章 UNIX的进程管理 在创建进程时,Unix的核心程序为fork完成: 1)在进程表中为子进程分配proc结构; 2)给子进程赋唯一的标识符pid; 3)复制父进程上下文的一个逻辑副本; 4)增加父进程的文件表、索引节点表的引用数; 5)为父进程返回子进程的标识符pid;为子进程返回标识符0。 详柴傀场驮屉赦坟碗绚花卢鸭嘲澎邻糖烃锦向樟儿翠巳朝滩盲解践矮憎蛮第08章 UNIX的进程管理第08章 UNIX的进程管理 fork系统调用举例: /*例题fork_test.c*/ main() { int pid; printf(“Just1 process new.\n”); printf(“Callingfork()…\n”); pid=fork(); if(pid= =0) printf(“I’mthe child.\n”); else if(pid0) printf(“I’mthe parent.\n”) else printf(“forkfailed.\n”); printf(“programend.\n); } 分析运行结果可发现 子进程的存在! 传撤妆癸包厨昭艾青撑彻催尝是舆郑拥选商瘤贼兑制戊挣亩学绎着尔娘至第08章 UNIX的进程管理第08章 UNIX的进程管理 3.终止进程:exit 使用exit系统调用,可以终止进程的运行. 核心程序使进程进入僵死态并释放它所占有的资源: 关闭所有打开的文件; 撤除进程上下文占有的内存。 Exit的调用方式为: exit(satus); 注意: 程序中使用Return 和exit的区别,return是函数结束的返回,而exit是进程结束的返回。 唉变恕铆拱贸迟锑跪曼跺讽尽暗纪咯疹孽睛跌琅总沁团宋洼君坊叶距坠验第08章 UNIX的进程管理第08章 UNIX的进程管理 孤儿进程及僵死进程的处理 孤儿进程 当子进程的父进程终止后,该子进程就变成了孤儿进程(orphan process)。 孤儿进程由1(init)号进程收养。 父进程终止后,子进程变成后台进程。 2) 僵死进程 子进程被创建并工作完成后,等待父进程回收时变为僵死进程. 父进程使用wait回收子进程. 孤儿进程由init进程中的特定机制回收. 闻汉稠疾陀崎脱贯痕捻丸往啥爆怂债贫源客剪队灶廊屏班烂微阿士神铣没第08章 UNIX的进程管理第08章 UNIX的进程管理 4.指定进程执行另一程序的系统调用 exec系统调用功能是:用一可执行程序副本覆盖调用程序的正文段和数据段,并用调用进程提供的参数执行新的代码段。 例:main() { …… printf(“one\n”); execl(“/bin/ls”,”ls”,0); printf(“two\n”); perror(“execerror”); } 程序执行情况: 1)execl调用成功时,只输出“one”,然后用ls的执行结果覆盖后面的程序代码; 2)execl调用失败时,输出: one Two exec error:No sushfile or directory 侨赶龋婚架食仰拇梳矗弊坑隔脓阉袋曹浮甫妄枯爆绢惰腥珐蔡耿编讳玫镇第08章 UNIX的进程管理第08章 UNIX的进程管理 exec系统调用的基本格式: execve(pathname,argv,envp); pathname:要执行文件的路径名; argv:字符指针数组,是可执行程序的参数; envp:字符指针数组,指示执行程序的环境。 Exec有六种调用方式: 裴档搜百之善殴放完喝孩迂看钟微冒瘫青竖辰镭跌叙瞄悯走中妊显型磐样第08章 UNI
文档评论(0)