第08章UNIX的进程管理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 进程管理的系统调用 1.系统调用控制进程的产生、运行、消亡 Unix中进程是由系统调用fork创建的实体。 调用fork的是父进程,由fork创建的是子进程。 一个进程可以有多个子进程,但只有一个父进程。父子进程的关系图示如下: parent zomb child child parent wait fork exec exit 2.进程的创建 进程创建:fork() 调用格式:pid=fork(); 若调用失败,pid=-1 若调用成功,返回子进程pid的值(pid=0)及proc结构中的某些参数; 此时子进程得到的返回值是0,且子进程是父进程的副本。 在创建进程时,Unix的核心程序为fork完成: 1)在进程表中为子进程分配proc结构; 2)给子进程赋唯一的标识符pid; 3)复制父进程上下文的一个逻辑副本; 4)增加父进程的文件表、索引节点表的引用数; 5)为父进程返回子进程的标识符pid;为子进程返回标识符0。 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); } 分析运行结果可发现 子进程的存在! 3.终止进程:exit 使用exit系统调用,可以终止进程的运行. 核心程序使进程进入僵死态并释放它所占有的资源: 关闭所有打开的文件; 撤除进程上下文占有的内存。 Exit的调用方式为: exit(satus); 注意: 程序中使用Return 和exit的区别,return是函数结束的返回,而exit是进程结束的返回。 孤儿进程及僵死进程的处理 孤儿进程 当子进程的父进程终止后,该子进程就变成了孤儿进程(orphan process)。 孤儿进程由1(init)号进程收养。 父进程终止后,子进程变成后台进程。 2) 僵死进程 子进程被创建并工作完成后,等待父进程回收时变为僵死进程. 父进程使用wait回收子进程. 孤儿进程由init进程中的特定机制回收. 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 exec系统调用的基本格式: execve(pathname,argv,envp); pathname:要执行文件的路径名; argv:字符指针数组,是可执行程序的参数; envp:字符指针数组,指示执行程序的环境。 Exec有六种调用方式: exec的六种调用方式: execve execle execvp execv execl execlp 它们以后两个字母区别调用方式: l: 长格式调用,每个参数指针独立传递并以空指针0结束; 例子1 v:用argv指针数组传递运行参数;否则每个命令行参数是单个参数. 例子2 e:从envp指针数组传递环境参数;否则用现有环境变量复制新程序环境. p:在PATH指定的目录中搜索指定的文件,否则在当前目录中搜索。 例1: execl(“/bin.ls”,”ls”,”-l”,”abc.c”,0); 例2: main(argc,argv) intargc; char *argv[]; { if (argc2) { printf(“youforgot to type your name\n”); exit(0); } printf(“H

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档