首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wait(NULL)究竟是如何工作的?

wait(NULL)究竟是如何工作的?
EN

Stack Overflow用户
提问于 2017-02-24 05:48:52
回答 1查看 30.9K关注 0票数 7

如果我使用wait(null),并且我知道(肯定)子进程将在我们到达父进程中的wait(null)之前完成(退出),那么wait(null)会阻止父进程吗?我是说,wait()收不到任何信号,对吧?

代码语言:javascript
运行
复制
int main() {
   int pipe_descs[2] ;
   int i, n, p ;

   srand(time(NULL(  ;
   pipe(pipe_descs) ;

   for (i = 0; i < 2; i++) {
           pid_t status = fork() ;

           if (status == 0) {
                 n = rand() % 100;
                 p = (int) getpid() ;

                 write(pipe_descs[1],  &n,  sizeof(int)) ;
                 write(pipe_descs[1],  &p,  sizeof(int)) ;
                 exit(0) ;
            }
           else {
               read(pipe_descs[0],  &n,  sizeof(int)) ;
               read(pipe_descs[0],  &p,  sizeof(int)) ;
               printf(" %d %d\n", n, p) ;
               wait(NULL)  ;   //  (1)
         }
   }

    return 0 ;
}
EN

Stack Overflow用户

回答已采纳

发布于 2017-02-24 05:52:19

wait(NULL)将阻止父进程,直到它的任何子进程完成。如果子进程在父进程到达wait(NULL)之前终止,则子进程将转换为zombie process,直到其父进程等待它并将其从内存中释放。

如果父进程不等待它的子进程,并且父进程先完成,那么子进程将成为孤立进程,并被分配给init作为其子进程。并且init将等待并释放进程表中的进程条目。

换句话说:父进程将被阻塞,直到子进程将退出状态返回给操作系统,然后再返回给父进程。如果子进程在父进程到达等待(NULL)之前完成,那么它将读取退出状态,释放进程表中的进程条目,并继续执行,直到它也完成。

票数 17
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42426816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档