繁体   English   中英

为什么在 execvp 之后我们需要子出口?

[英]Why d we need child exit after execvp?

最近一直在想,为什么执行完execvp后,还需要在child执行完后使用exit。 欢迎深入解释。

不需要孩子在execvp() exit() ) ,但确保它这样做通常对您来说是明智的。 以至于支持将其作为规则提供给新手。

当对execvp()或其他 exec 函数之一的调用成功时,它具有将当前运行的进程映像替换为新进程映像的效果。 因此,这些函数不会在成功时返回,在这种情况下,后面的任何内容都不重要。 那么,问题就完全是关于在exec*调用失败的情况下该怎么做。

如果在 exec 失败的情况下不退出子进程,那么它将继续运行父进程的代码。 这很少是有意或想要的。 它可能会做它不打算做的工作,通过不及时退出来延迟父级(通常是wait() ing),并最终以不反映实际发生情况的退出状态误导父级。

所有这些,也许还有更多,都是通过确保exec*调用之后的控制流很快到达程序终止并出现故障状态来解决的(通常通过_Exit()_exit() ;不太常见的是通过exit()abort() )。 根据具体情况,在退出之前发出诊断消息或执行某种其他类型的清理可能合适也可能不合适。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM