c/c++语言开发共享如果子进程变为ZOMBIE或CRASHES,父进程可能在“等待”步骤中挂起?

我使用管道/分叉等来执行在C中执行子进程并且它正在100%工作。

基本上我在父代码中有以下WAIT步骤:

wait(&rv); //where rv is just an int of zero 

我的问题是:如果孩子因分段错误崩溃或变成僵尸,父母是否有可能“无限期地”或等待?

换句话说,如果子代码没有“无限循环”等等……父进程是否仍然可以永久地“挂起”等待步骤?

这里最安全的方法是防止处理? 我见过一个WNOHANG ….我应该用它吗? 但我需要等待子流程结束才能继续吗?

 waitpid(-1, &status, WNOHANG) 

此外,最佳做法是使用SIGCHLD处理程序吗?

谢谢您的帮助

林顿

    如果存在僵尸子进程(通过分段错误或正常退出),则wait将返回其退出状态。 如果没有僵尸孩子,如果至少有一个正在运行的孩子,则等待将挂起,但如果没有孩子则不会挂起。 在后一种情况下,它将返回-1并设置errno = ECHILD

    如果你想等一个特定的孩子,你可能希望使用waitpid ,但听起来你不需要WNOHANG

    SIGCHLD处理程序可用于表示对wait的调用不会挂起,但不需要。 如果您不想关心您的孩子是否在跑,您可以将SIGCHLD设置为SIG_IGN 。 然后不会生成僵尸。

      以上就是c/c++开发分享如果子进程变为ZOMBIE或CRASHES,父进程可能在“等待”步骤中挂起?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541674.html

      (0)
      上一篇 2021年1月3日
      下一篇 2021年1月3日

      精彩推荐