【问题标题】:In C, Why are child processes not reaped automatically?在 C 中,为什么子进程不自动收割?
【发布时间】:2015-06-01 09:19:15
【问题描述】:

为了解释,我不是在问如何收获一个过程。

在 C 中,父进程必须显式地获取创建的子进程,即使子进程通过执行 exit() 函数调用退出。

我了解在收割孩子时,可能需要获取孩子的退出状态。 事实上,这是唯一可以从子进程获得的信息。那么,为什么操作系统不只是存储退出状态(一个整数),而是仍然存储与孩子相关的所有内存,直到获得?

【问题讨论】:

    标签: c unix memory-management fork child-process


    【解决方案1】:

    你的问题的前提是错误的。操作系统确实只存储退出状态(和资源使用报告),但最重要的是,它还保留 pid,直到您等待它。最后一部分很重要,因为如果在等待原始进程之前将 pid 重新分配给新进程,则不可能将其用作请求退出状态的标识符。

    【讨论】:

    • 感谢您的回答,所以这没什么大不了的:不收获子进程?只是浪费了一小部分内存吧?
    • 没有。可用的 pid 数量有限:最多为 2^(8*sizeof(pid_t)),实际上通常只有 32768。个人用户甚至可能受到低得多的限制。如果你不等待它们,它们最终会被耗尽,你无法进行更多的进程。
    • 如果不清楚:操作系统没有不必要地浪费在进程退出和等待 pid 之间可以释放的资源,但它 确实会阻止重用重要资源——进程标识符的空间——直到你等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多