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