gpt4 book ai didi

c - 收割 child 意味着什么?

转载 作者:行者123 更新时间:2023-12-03 09:47:51 25 4
gpt4 key购买 nike

我刚刚参加了一个讲座,总结如下:

收获

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

    parent 被给予退出状态信息

    然后内核删除僵尸子进程

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

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

    最佳答案

    子进程退出时并没有完全“消失”。它不再作为正在运行的进程存在,并且它的大部分/所有资源(内存、打开的文件等)都被释放,但它仍然保留在进程表中。它保留在进程表中,因为这是存储其退出状态的位置,因此父进程可以通过调用 wait 之一来检索它。变体。如果 parent 未能调用wait ,进程表条目一直存在——这就是使它成为“僵尸”的原因。
    我说它的大部分/所有资源都被释放了,但是肯定仍在消耗的一个资源是那个进程表槽。
    只要(死) child 的 parent 存在,内核就不会知道 parent 不会调用wait。最终,进程表槽必须留在那里,以便最终调用 wait (如果有的话)可以返回正确的退出状态。
    如果父进程最终退出(从未调用 wait ),子进程将由祖父进程继承,这通常是类似于 shell 的“主”进程,或 init ,通常会调用 wait这将最终“收获”可怜的年轻僵尸。
    所以,是的,确实, parent 正确“收获” child 的唯一方法是,正如您在讲座中所说,调用 wait 之一职能。 (或者退出,但如果 parent 长期运行,这不是一个选择。)
    脚注:我说“ child 将由祖 parent 继承”,但我想我错了。在 Unix 和 Linux 下,孤立进程通常总是由 pid 1 继承,即 init .

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

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