如果子进程变为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 。 然后不会生成僵尸。