while(((child=wait(&status))==-1)&(errno==EINTR)); 作用

「已注销」 2009-05-14 04:41:54
网上的linux创新新进程的例子中看到这一句, 有什么作用呢?

根据我自己的想法:
1.正常情况下, wait返回子进程id, 也就是 child=wait(&status))==-1 返回0, 对于 errno==EINTR在这种情况下 也是返回0 .
2.如果没有子进程wait直接返回0, 情形同上
3.如果是发生错误, 则wait返回-1, 则child=wait(&status))==-1 为1, 而这种时候是否一定是由于系统调用失败造成的呢(EINTR).如果是这样调用也没有看到任何的作用. 如果不是,那是什么呢?
4.如果两件事都为真, 则是中断事件的发生导致wait调用失败, 在这种情况下继续调用是否是因为在这种情况下可以继续调用wait去等待直到wait调用成功? 另外, 是否只有在中断情形下这么做? 还有什么原因会导致wait失败呢?

不知道是否描述清楚.谢谢.
...全文
399 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sallow08 2009-05-17
  • 打赏
  • 举报
回复
wait函数失败的情况有:
1:是进程没有子进程
2:被信号中断
那句程序的意思是 如果wait 是被信号(SIGCHID信号应该除外,wait对SIGCHID有特殊处理 )
中断返回(此时error == EINTER) 则继续循环等待子进程终止
「已注销」 2009-05-15
  • 打赏
  • 举报
回复
自己想明白了. 目的在发生系统调用(wait)失败的情形下一直调用wait,知道wait成功为止. 为什么是在系统调用失败的情况下呢? 我想是因为只有这种情形下才会产生wait调用失败.
十八道胡同 2009-05-14
  • 打赏
  • 举报
回复
帮顶!!!
liliangbao 2009-05-14
  • 打赏
  • 举报
回复
帮顶!!!
jncg66 2009-05-14
  • 打赏
  • 举报
回复
复杂,学习ing……

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧