- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux编程基础之进程等待(wait()函数)
编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数 :wait() 函数原型是 #include sys/types.h #include wait.h int wait(int *status) 函数功能是 :父进程一旦调用了wait就立即阻塞自己,由wait 自动分析是否当前进程的某个子进程已经退出,如 果让它找到了这样一个已经变成僵尸的子进程 ,wait就会收集这个子进程的信息 ,并把它彻底销毁后返回;如果 没有找到这样一个子进程 ,wait就会一直阻塞在这里 ,直到有一个出现为止。 注 : 当父进程忘了用wait()函数等待已终止的子进程时,子进程就会进入一种无父进程的状态,此时子进程就是僵尸 进程. wait()要与fork()配套出现,如果在使用fork()之前调用wait(),wait()的返回值则为1,正常情况下wait()的返回值为 子进程的PID. 如果先终止父进程,子进程将继续正常进行 ,只是它将由init进程(PID 1)继承,当子进程终止时,init进程捕获这 个状态. 参数status用来保存被收集进程退出时的一些状态 ,它是一个指向int类型的指针。但如果我们对这个子进程 是如何死掉毫不在意 ,只想把这个僵尸进程消灭掉 ,(事实上绝大多数情况下 ,我们都会这样想),我们就可以 设定这个参数为NULL ,就像下面这样 : pid wait(NULL); 如果成功 ,wait会返回被收集的子进程的进程ID ,如果调用进程没有子进程 ,调用就会失败 ,此时wait返回1 , 同时errno被置为ECHILD。 如果参数status的值不是NULL ,wait就会把子进程退出时的状态取出并存入其中, 这是一个整数值 (int ),指出了子进程是正常退出还是被非正常结束的 ,以及正常结束时的返回值 ,或被哪一个信号结束的等信 息。由于这些信息 被存放在一个整数的不同二进制位中,所以用常规的方法读取会非常麻烦 ,人们就设计了一套 专门的宏(macro )来完成这项工作 ,下面我们来学习一下其中最常用的两个 : 1 ,WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的 ,如果是 ,它会返回一个非零值。 (请注意 ,虽然名字一样 ,这里的参数status并不同于wait唯一的参数–指向整数的指针status ,而是那个指针所 指向的整数 ,切记不要搞混了。) 2 , WEXITSTATUS(status) 当WIFEXITED返回非零值时 ,我们可以用这个宏来提取子进程的返回值 ,如果子进 程调用exit(5)退出,WEXITSTATUS(status) 就会返回5 ;如果子进程调用exit(7) ,WEXITSTATUS(status)就会返 回7。请注意 ,如果进程不是正常退出的 ,也就是说 , WIFEXITED返回0 ,这个值就毫无意义。 代码示例 :wait.c 1 #include stdio.h 2 #include sys/stat.h 3 #include sys/types.h 4 #include unistd.h 5 #include wait.h 6 #include errno.h 7 #include stdlib.h 8 /*********************************************************** 9 功能说明 :进程等待wait()方法的应用 10 author: linux.sir@ 11 12 ***********************************************************/ 13 void waitprocess(); 14 15 16 int main(int argc, char * argv[]) 17 { 18 waitprocess(); 19 20 } 21 22 void waitprocess() 23 { 24 25 int count 0; 26 27 pid_t pid fork(); 28 int status 1; 29 30 if(pid0) 31 { 32 printf(fork error for %m\n,errno ); 33 }else if(pi
文档评论(0)