gpt4 book ai didi

c - 收割 child 意味着什么?

转载 作者:行者123 更新时间:2023-12-04 14:37:29 26 4
gpt4 key购买 nike

我刚刚听了一个演讲,总结为:

收割

  • 由父级对终止的子级执行(使用 wait 或 waitpid)

    parent 获得退出状态信息

    内核然后删除僵尸子进程

  • 所以我知道收割是通过调用 wait 来完成的。或 waitpid来自父进程,之后内核删除僵尸进程。如果确实如此,那么只有在调用 wait 时才会进行收割。或 waitpid ,为什么子进程在返回进入函数后实际上消失了 - 我的意思是确实看起来好像子进程已经被收割了,因此即使父进程可能没有等待,也不会浪费资源。

    所以只有在调用 wait 时才有可能“收割”或 waitpid ?只要进程返回并退出它们的入口函数(我假设所有进程都会这样做),进程是否会被“收割” - 谈论“收割”好像它是特殊的东西有什么意义?

    最佳答案

    子进程退出时并没有完全“消失”。它不再作为正在运行的进程存在,并且它的大部分/所有资源(内存、打开的文件等)都被释放,但它仍然保留在进程表中。它保留在进程表中,因为它是存储其退出状态的地方,以便父进程可以通过调用 wait 之一来检索它。变种。如果家长无法调用 wait ,进程表条目仍然存在——这就是使它成为“僵尸”的原因。

    我说它的大部分/所有资源都被释放了,但肯定仍在消耗的一种资源是进程表槽。

    只要(死) child 的 parent 存在,内核就不会知道 parent 不会调用 wait最终,进程表槽必须留在那里,以便最终调用 wait (如果有)可以返回正确的退出状态。

    如果父进程最终退出(从未调用 wait ),子进程将被祖父进程继承,这通常是类似于 shell 的“主”进程,或 init ,这确实经常调用 wait这将最终“收割”可怜的年轻僵尸。

    所以,是的,正如您的讲座所说, parent 正确“收获” child 的唯一方法是调用 wait 之一。职能。 (或者退出,但如果父级长期运行,那就很糟糕了。)

    关于c - 收割 child 意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885831/

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