gpt4 book ai didi

c - 在 Linux 中等待进程

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:49 26 4
gpt4 key购买 nike

我正在实现一个模拟 Linux shell 的程序,我对管道的实现有疑问(命令中只有一个管道的实现 - 例如 ls | grep )-

我在管道命令中的主进程 A 派生并创建了进程 B 和 waitpid。进程 B 又再次 fork 并创建进程 C - 然后 B 和 C 都使用 execvp 来转换为所需的命令。但是在这个实现中,没有人等待 C 应该创建一个僵尸进程。但奇怪的是,我没有看到在我的程序中创建任何僵尸。我需要一些帮助来理解为什么——因为我还需要概括实现以支持命令中的任意数量的管道,这意味着如果我继续当前的实现,我将有许多没有人等待的进程——所以我需要理解如果它是正确的,如果不正确(很可能)如何修复它,这样我不仅可以等待 B,还可以等待 C 等等。

最佳答案

一旦进程B死掉,C会被init领养,init会在它上面wait(),所以C会消失几乎在 it 和 B 都终止之后。 init 为所有孤儿执行此操作,正是为了防止僵尸进程永远卡在那里。

所以你只会在父进程还活着的时候看到僵尸进程。这是有道理的,因为保持进程处于僵尸状态的唯一要点是在某个地方包含终止状态等,以便父进程可以在准备就绪时捕获它们。如果父进程已经退出,那么显然它不关心剩余的信息,因此系统可以(并且将会)安全地删除该信息和包含它的僵尸进程。

关于c - 在 Linux 中等待进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472452/

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