当前位置:  技术问答>linux和unix

wait waitpid 区别

    来源: 互联网  发布时间:2016-05-25

    本文导语:  调用w a i t或w a i t p i d的进程可能会: • 阻塞(如果其所有子进程都还在运行)。 • 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。 • 出错立即返回(如果它没有任何...

调用w a i t或w a i t p i d的进程可能会:
• 阻塞(如果其所有子进程都还在运行)。
• 带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态)。
• 出错立即返回(如果它没有任何子进程)。

waitpid提供了wait的非阻塞版本

问题:此处阻塞该如何理解,调用wait,如果没有子进程终止则父进程在此轮询,直到有子进程终止wait函数返回,父进程才可以继续执行是吗?  如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?

|
 如果是,那么waitpid的非阻塞呢,父进程调用waitpid没有子进程终止,则waitpid立即返回0,父进程继续执行,如果随后一个子进程终止,因为waitpid已经返回了,那么父进程还能获得子进程结束的相关信息吗?

waitpid的非阻塞模式一开始就被设定伪获取子进程的状态功能,而不是一定要获取其终止状态,所以你描述的这种情况,父进程肯定不能获得子进程结束的状态信息啊。你可以自己根据waitpid返回的结果,决定之后还需不需要再调用waitpid。。

|
每个子进程退出的时候都会发送一个SIGCHILD的信号,如果这时父进程没有调用wait族的函数,那么该子进程将变成僵尸进程直到父进程调用wait族函数为止。
当然,如果一个进程的父进程是init,不会产生僵尸进程。

|
其实也会的,只是这个僵尸进程存在的时间实在是太短了,你看不到而已,一个进程退出到其父进程wait动作前就是处在僵尸状态。


|


我认为之所以叫僵尸是因为它还占着资源而且不会自动释放(我死活就癞上了),这里虽然也是没有释放其他条件同僵尸但是会很快释放的,所以不能叫做僵尸了.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类frame的类成员方法: wait_cursor定义及介绍
  • DEFINE_WAIT(__wait)这宏把__wait变量定义在了进程的内核堆栈中,则另一进程使用wake_up时,是如何访问到__wait变量的呢?
  • java命名空间java.awt类cursor的类成员方法: wait_cursor定义及介绍
  • wait_for_completion wait_event 区别
  • java命名空间java.lang枚举thread.state的类成员方法: waiting定义及介绍
  • sleep(5)与wait(5)还有下面这个strruct timeval wait_time有什么不同。
  • java命名空间java.lang枚举thread.state的类成员方法: timed_waiting定义及介绍
  • java 中的wait()怎么用呢
  • java命名空间java.lang类object的类成员方法: wait定义及介绍
  • waiting(0);什么意思?
  • wait()操作
  • shell中的wait是什么意思?
  • 请那位高手详细解释一下wait函数的用法和意义?
  • 编译模块时出的问题 storage size of 'wait' isn`t know
  • 关于prepare_to_wait的参数
  • wait()?
  • FIN_WAIT_2
  • netstat发现TIME_WAIT
  • netstat查看有很多TIME_WAIT状态的ip,怎么回事?
  • 父进程的死循环里的wait为何会让子进程僵尸进程
  • linux sem_wait 为什么会阻塞进程?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3