gpt4 book ai didi

c - 如果子进程变成 ZOMBIE 或 CRASHES,父进程是否可能在 "wait"步骤挂起?

转载 作者:行者123 更新时间:2023-12-04 11:31:24 25 4
gpt4 key购买 nike

我已经使用 pipe/fork 等 execv 在 C 中执行一个子进程,它正在 100% 工作。

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

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

我的问题是:如果 child 因段错误崩溃或变成僵尸, parent 是否有可能“无限期地”等待或挂起?

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

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

waitpid(-1, &status, WNOHANG)

此外,使用 SIGCHLD 处理程序是否是最佳实践?

感谢帮助

林顿

最佳答案

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

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

SIGCHLD 处理程序可用于发出对 wait 的调用不会挂起的信号,但在其他方面则不需要。如果你不想关心你的 child 是否正在运行,你可以将SIGCHLD设置为SIG_IGN。则不会产生僵尸。

关于c - 如果子进程变成 ZOMBIE 或 CRASHES,父进程是否可能在 "wait"步骤挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7938677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com