gpt4 book ai didi

c - 在 Linux 中使用 fork() 和 exec() 时如何防止创建僵尸进程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:59 24 4
gpt4 key购买 nike

当我使用 fork() 和 exec() 在后台运行应用程序时,有什么方法可以防止创建僵尸进程吗? parent 不应该 wait() 让 child 完成。我也不能使用 sigaction() 和 sigaction.sa_handler 因为它会影响我不想要的所有子进程。我想要一些只会收获那个特定 child 的东西,或者会阻止产生任何僵尸的东西。请帮忙。

最佳答案

如果你想创建一个你不必等待的“分离”进程,最好的方法是 fork 两次,这样它就是一个“孙子”进程。立即在直接子进程上 waitpid ,它应该在再次 fork 后立即调用 _exit (所以这个 waitpid 不会阻止父进程的前进) .孙进程将成为孤立进程,因此它会被 init 进程继承,您永远不必再处理它。

或者,您可以使用 SA_NOCLDWAITSIGCHLD 安装信号处理程序。然而,这通常是一个非常糟糕的主意,因为它的影响是全局性的。它会严重破坏您使用的任何库代码需要能够等待子进程,包括标准库函数,如popen,可能是wordexp ,可能是 grantpt

关于c - 在 Linux 中使用 fork() 和 exec() 时如何防止创建僵尸进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361227/

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