- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.2-2.3进程的描述进程控制讲解
为 防止OS本身及关键数据遭到应用程序的有意或无意破坏,通常将处理机的执行状态分成系统态(管态、内核态)和用户态(目态、用户态)。 管态:特权较高,能执行一切指令,访问所有寄存器和存储区,OS在管态下运行。 目态:特权较低,仅执行规定指令,访问指定的寄存器和存储区,应用程序在目态下运行。 1.系统调用 ⑴.进程终止 格式:void exit(stat); 进程结束时使用该系统调用自我终止,并向创建它的父进程发终止信号stat。 ⑵.父进程等待子进程终止 格式1:pid_t wait( [ int *stat_addr,] 0 ); 功能:父进程使用它等待任意一个子进程终止,如果在执行wait()之前已经有一个子进程结束了,则对其做善后处理,并返回子进程的pid号,如果没有则返回-1,该进程阻塞,插入等待子进程终止的队列,当有子进程终止时被唤醒。在stat_addr中保留了子进程僵死时的终止信息(不是返回值)。 格式2:pid_t waitpid (pid_t pid, int * stat_addr, int options ); 功能:等待指定pid的子进程终止 注意:一个wait()只能用来等待一个子进程终止,如果等待多个子进程终止则需要使用多个wait()。 返回值:≥0 表示有子进程终止,其值为终止子进程的pid号。 -1 表示无子进程终止。 所用头文件: # include sys / wait.h # include sys / types.h 若父进程仅仅只是等待任意一个子进程结束,而不需要取 子进程发来的信号,则可以简单地使用 wait(0)。 注意:如果该进程没有创建自己的子进程就不能使用wait() 或waitpid(),否则系统会返回一个出错信息。 如果要取子进程执行exit()后所发来的终止信号stat,可以 使用*stat来取该变量中的值,而不能使用wait()的返回值,因 为wait()的返回值是该终止子进程的pid号。在Linux9版本 中,终止信号stat的值是子进程用exit(stat)发出的stat的值的 256倍。 2.父进程等待子进程的同步举例 利用exit()和wait()实现父进程等待子进程的同步的最简单的方法是: 在子进程结束处使用系统调用exit(0),使子进程自我终止,并发终止信号给其父进程; 在父进程中需要等待子进程结束处使用系统调用wait(0),有几个子进程就要使用几个wait(0)分别接收诸子进程的终止信号,从而实现父进程等待子进程的同步。 [例] 实现子进程先输出“B”然后父进程再输出“A”。 #includestdio.h main() { int p1; while((p1=fork())==-1); if(p10) { wait(0); //父进程等待子进程终止 putchar(A); } else { putchar(B); exit(0); //子进程向父进程发终止信号0 } } 源程序编译连接并多次运行后的结果都是子进程先输出B父进程后输出A,说明父进程等待子进程的同步关系成立: 3.父进程如何取子进程的终止信息举例[例]:父进程创建子进程p1,若p1终止时执行exit(1),父进程中使用wait(stat)取该信息,再输出*stat的值则可以看到其值为256,即1*256。由此可见,其信息的存储格式为n*256(不同的版本可能不同)。将下述程序中子进程的终止函数的参数分别置为:exit(0)、exit(1)和exit(2),然后分别编译执行3次,观察输出的结果: #includeunistd.h #includestdio.h main() { int p,*stat_addr; while((p=fork())==-1); //创建子进程 if(p==0) //子进程返回发终止信息 exit(0); //分别使用exit(0)、exit(1)、exit(2) else //父进程返回 { wait(stat_addr); //等待并取子进程终止信息 printf(%d\n,*stat_addr); //输出终止信息 exit(0); } } 运行结果: 注意:子进程用exit(status)发给父进程的status信息不是wait( )的返回值,如果使用语句x=wait(status),则x的值是终止执行的子进程的pid号。 1.问题的提出 子进程被创建时,该子进程映像中的程序是操作系统在 响应fork( )调用时,复制其父进程映像所得
您可能关注的文档
最近下载
- 电力行业电网运行维护员岗面试真题题库参考答案和答题要点.docx VIP
- 健康照护师复习资料试题附答案(500题).docx
- 2型糖尿病医学演示课件.ppt VIP
- 2024新沪教版英语(五·四学制)七年级上单词表 (英译汉).docx VIP
- (2025年版)基孔肯雅热诊疗方案全文PPT课件.ppt
- 浙江绍兴市12345政务热线招录工作人员6人笔试备考题库带答案详解.docx VIP
- 化学丨河北省石家庄市2024届高三下学期3月联考(一模)化学试卷及答案.pdf VIP
- SHT35212007石油化工仪表工程施工技术规程.pdf VIP
- 心力衰竭课件PPT.pptx VIP
- NFPA 72-2022 国家火灾报警和信号代码(中文翻译版).pdf VIP
文档评论(0)